#### 17.4.9.1 源的异步连接故障转移

为复制通道集激活异步连接故障转移`SOURCE_CONNECTION_AUTO_FAILOVER=1`在[`将复制源更改为`](change-replication-source-to.html)语句（来自 MySQL 8.0.23）或[`将主更改为`](change-master-to.html)通道的语句（在 MySQL 8.0.23 之前）。通道必须使用 GTID 自动定位（`SOURCE_AUTO_POSITION = 1`\|`MASTER_AUTO_POSITION = 1`）。

重要的

当与源的现有连接失败时，副本首先重试相同的连接，次数由`SOURCE_RETRY_COUNT`\|`MASTER_RETRY_COUNT`的选项[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)陈述。尝试之间的间隔由`SOURCE_CONNECT_RETRY`\|`MASTER_CONNECT_RETRY`选项。当这些尝试用尽时，异步连接故障转移机制将接管。请注意，这些选项的默认值是为连接到单个源而设计的，使副本重试相同的连接 60 天。为保证异步连接故障转移机制能够及时启动，设置`SOURCE_RETRY_COUNT`\|`MASTER_RETRY_COUNT`和`SOURCE_CONNECT_RETRY`\|`MASTER_CONNECT_RETRY`到最小的数量，只允许使用相同的源进行几次重试，以防连接失败是由短暂的网络中断引起的。合适的值是`SOURCE_RETRY_COUNT=3`\|`MASTER_RETRY_COUNT=3`和`SOURCE_CONNECT_RETRY=10`\|`MASTER_CONNECT_RETRY=10`，这使得副本以 10 秒的间隔重试连接 3 次。

您还需要设置复制通道的源列表，以指定可用于故障转移的源。您可以使用[`asynchronous_connection_failover_add_source`](replication-functions-source-list.html#function_asynchronous-connection-failover-add-source)和[`asynchronous_connection_failover_delete_source`](replication-functions-source-list.html#function_asynchronous-connection-failover-delete-source)添加和删​​除单个复制源服务器的功能。要添加和删除托管服务器组，请使用[`asynchronous_connection_failover_add_managed`](replication-functions-source-list.html#function_asynchronous-connection-failover-add-managed)和[`asynchronous_connection_failover_delete_managed`](replication-functions-source-list.html#function_asynchronous-connection-failover-delete-managed)代替功能。

这些函数命名相关的复制通道，并指定要添加到通道的源列表或从通道的源列表中删除的 MySQL 实例的主机名、端口号、网络命名空间和加权优先级（1-100，其中 100 是最高优先级）。对于托管组，您还需要指定托管服务的类型（目前只有 Group Replication 可用），以及托管组的标识符（对于 Group Replication，这是[`group_replication_group_name`](group-replication-options.html#sysvar_group_replication_group_name)系统变量）。添加托管组时，只需要添加一个组成员，副本会自动添加当前组成员中的其余成员。删除托管组时，会同时删除整个组。

在 MySQL 8.0.22 中，异步连接故障转移机制在副本与源的连接失败后被激活，并发出一个[`开始复制`](start-replica.html)声明以尝试连接到新源。在此版本中，如果复制接收器线程由于源停止或网络故障而停止，则连接将故障转移。在任何其他情况下，连接都不会故障转移，例如当复制线程被[`停止复制`](stop-replica.html)陈述。

从 MySQL 8.0.23 开始，如果源列表中的另一个可用服务器具有更高的优先级（权重）设置，异步连接故障转移机制也会对连接进行故障转移。此功能可确保副本始终与最合适的源服务器保持连接，并且它适用于托管组和单个（非托管）服务器。对于托管组，源的权重取决于它是主服务器还是辅助服务器。因此，假设您设置托管组以将较高的权重分配给主节点，将较低的权重分配给辅助节点，当主节点发生更改时，会将较高的权重分配给新的主节点，因此副本会更改与它的连接。如果当前连接的受管源服务器离开受管组，或者在受管组中不再占多数，则异步连接故障转移机制会另外更改连接。

对连接进行故障转移时，将选择通道源列表中列出的替代源中具有最高优先级（权重）设置的源进行第一次连接尝试。副本首先检查它是否可以连接到源服务器，或者在托管组的情况下，源服务器是否具有`在线的`在组中的状态（不是`正在恢复`或不可用）。如果最高权重的源不可用，则副本尝试按权重降序排列所有列出的源，然后从最高权重的源重新开始。如果多个源具有相同的权重，则副本将随机排序它们。如果副本需要重新开始处理该列表，它会包含并重试发生原始连接失败的源。

源列表存储在`mysql.replication_asynchronous_connection_failover`和`mysql.replication_asynchronous_connection_failover_managed`表，并且可以在性能模式表中查看[`replication_asynchronous_connection_failover`](performance-schema-replication-asynchronous-connection-failover-table.html)和[`replication_asynchronous_connection_failover_managed`](performance-schema-replication-asynchronous-connection-failover-managed-table.html).副本使用监控线程来跟踪托管组的成员资格并更新源列表（`线程/sql/replica_monitor`）。的设置`SOURCE_CONNECTION_AUTO_FAILOVER`的选项[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)语句和源列表在远程克隆操作期间传输到副本的克隆。
