本节介绍如何使用 group_replication_set_as_primary()
函数更改单主组中哪个成员为主节点,该函数可以在组的任何成员上运行。完成此操作后,当前主节点将变为只读辅助节点,指定的组成员将变为读写主节点;这将取代第 20.1.3.1 节“单主模式”中介绍的通常主节点选举过程。
如果除了组复制通道之外,标准源到副本复制通道也在现有主节点上运行,则必须先停止该复制通道,然后才能更改主节点。您可以使用性能架构 replication_group_members
表中的 MEMBER_ROLE
列来标识当前主节点。
如果并非所有成员都运行相同的 MySQL 服务器版本,则只能指定运行组中最低 MySQL 服务器版本的新主节点。应用此保护措施是为了确保组维护与新功能的兼容性。
组正在等待的任何未提交事务必须先提交、回滚或终止,然后才能完成操作。您可以为使用该函数时正在运行的事务指定 0 秒(立即)到 3600 秒(60 分钟)的超时时间。超时没有默认设置,因此如果您未设置超时,则等待时间没有上限,并且在此期间可以启动新事务。
当超时到期时,对于尚未达到提交阶段的任何事务,客户端会话将断开连接,以便事务不会继续进行。已达到提交阶段的事务允许完成。当您设置超时时,它还会阻止从那时起在新主节点上启动新事务。即使未修改任何数据,明确定义的事务(使用 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)
要检查超时的状态,请使用性能架构 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