本节解释如何使用 group_replication_set_as_primary()
函数更改单一主服务器组中的主服务器,该函数可以在组中的任何成员上运行。当这样做时,当前的主服务器将变为只读次要服务器,而指定的组成员将变为读写主服务器;这将取代通常的主服务器选举过程,如 第 20.1.3.1 节,“单一主服务器模式” 中所述。
如果在现有的主服务器成员上运行标准的源到副本复制通道,除了组复制通道外,您必须在更改主服务器成员之前停止该复制通道。您可以使用 Performance Schema replication_group_members
表中的 MEMBER_ROLE
列来标识当前的主服务器。
如果组中的所有成员都不是运行相同的 MySQL 服务器版本,您只能指定一个运行组中最低 MySQL 服务器版本的新主服务器成员。这项安全措施是为了确保组保持与新功能的兼容性。
在操作完成之前,组中所有未提交的事务必须提交、回滚或终止。您可以指定一个超时时间,从 0 秒(立即)到 3600 秒(60 分钟),以等待事务的完成。(对于超时生效,组中的所有成员都必须使用 MySQL 8.0.29 或更高版本。)没有默认的超时设置,因此如果您不设置超时时间,那么等待时间将没有上限,并且新的事务可以在该时间内启动。
当超时期限到期时,对于尚未达到提交阶段的事务,客户端会话将被断开,以便事务不再继续。已经达到提交阶段的事务将被允许完成。当您设置超时时间时,也将阻止从该点开始的新事务在主服务器上启动。明确定义的事务(使用 START TRANSACTION
或 BEGIN
语句)将受到超时、断开和入站事务阻止,即使它们不修改任何数据。为了允许在函数操作期间检查主服务器,单个不修改数据的语句,如 一致性规则下的允许查询 中所列举的,将被允许继续。
通过发出以下语句,传入要成为新主服务器的成员的 server_uuid
:
SELECT group_replication_set_as_primary(member_uuid);
您可以像这样添加超时:
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300)
要检查超时状态,请使用 Performance Schema threads
表中的 PROCESSLIST_INFO
列,如下所示:
mysql> SELECT NAME, PROCESSLIST_INFO FROM performance_schema.threads
-> WHERE NAME="thread/group_rpl/THD_transaction_monitor"\G
*************************** 1. row ***************************
NAME: thread/group_rpl/THD_transaction_monitor
PROCESSLIST_INFO: Group replication transaction monitor: Stopped client connections
状态将显示事务监控线程的创建时间、新事务的停止时间、客户端连接的断开时间和最终的完成时间,以及新事务的允许时间。
在操作期间,您可以通过发出以下语句来检查进度:
mysql> SELECT event_name, work_completed, work_estimated
-> FROM performance_schema.events_stages_current
-> WHERE event_name LIKE "%stage/group_rpl%"\G
*************************** 1. row ***************************
EVENT_NAME: stage/group_rpl/Primary Election: Waiting for members to turn on super_read_only
WORK_COMPLETED: 3
WORK_ESTIMATED: 5