从 MySQL 8.0.27 开始,当您
SOURCE_CONNECTION_AUTO_FAILOVER=1
在
CHANGE REPLICATION SOURCE
TO
频道声明。该功能是为一组发送者和一组接收者设计的,即使在某些成员暂时不可用时也能保持彼此同步。When the feature is active and correctly configured, if the primary that is replicating goes offline or into an error state, the new primary starts replication on the same channel when it is elected. 新的主要使用通道的源列表来选择具有最高优先级(权重)设置的源,这可能与原始源不同。
要配置此功能,必须在复制组中的所有成员服务器以及任何新加入的成员上设置复制通道以及通道的复制用户帐户和密码。确保将
SOURCE_RETRY_COUNT
和
SOURCE_CONNECT_RETRY
设置设置为只允许几次重试的最小数字,例如 3 和 10。您可以使用CHANGE REPLICATION SOURCE
TO
语句设置复制通道,或者如果使用 MySQL 的克隆功能配置新服务器,这一切都会发生自动地。当他们加入时,频道的
SOURCE_CONNECTION_AUTO_FAILOVER
设置会从主要成员广播给他们。如果您以后禁用
SOURCE_CONNECTION_AUTO_FAILOVER
对于主频道,这也会广播到辅助服务器,它们会更改频道的状态以匹配。
使用 Group Replication member action 激活和停用副本的异步连接故障转移,
mysql_start_failover_channels_if_primary
默认情况下启用。您可以通过使用函数在主节点上禁用该成员操作来为整个组禁用它
group_replication_disable_member_action
,如本例所示:
mysql> SELECT group_replication_disable_member_action("mysql_start_failover_channels_if_primary", "AFTER_PRIMARY_ELECTION");
该功能只能在主节点上更改,并且必须为整个组启用或禁用,因此您不能让某些成员提供故障转移而其他成员不提供。当
mysql_start_failover_channels_if_primary
禁用成员操作时,不需要在次要成员上配置通道,但如果主要成员脱机或进入错误状态,则通道的复制将停止。请注意,如果有多个通道带有
SOURCE_CONNECTION_AUTO_FAILOVER=1
,成员操作将涵盖所有通道,因此无法通过该方法单独启用和禁用它们。在主通道上设置
SOURCE_CONNECTION_AUTO_FAILOVER=0
以禁用单个通道。
频道的源列表
SOURCE_CONNECTION_AUTO_FAILOVER=1
会在所有组成员加入时广播给他们,并且在更改时也会广播。无论源是自动更新成员资格的托管组,还是使用
、
asynchronous_connection_failover_add_source()
或
函数
手动添加或更改它们,都是这种情况。所有组成员都会收到记录在
和
中的当前源列表asynchronous_connection_failover_delete_source()
asynchronous_connection_failover_add_managed()
asynchronous_connection_failover_delete_managed()
mysql.replication_asynchronous_connection_failover
mysql.replication_asynchronous_connection_failover_managed
表。因为源不必位于托管组中,所以您可以设置函数以将一组接收器与一个或多个备用独立发送器,甚至单个发送器同步。但是,不属于复制组的独立副本无法使用此功能。