本节介绍如何使用 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