20.5.1.1 更改主节点
本节解释了如何使用group_replication_set_as_primary()
函数将单个主组中的成员变为主节点,这个函数可以在组中的任何成员上运行。当执行这个操作时,当前的主节点变为只读副本,而指定的组成员变为读写主节点;这取代了在第20.1.3.1节,“单个主模式”中描述的通常的主节点选举过程。
如果在现有主节点成员上运行的是标准源副本复制通道,除了Group Replication通道外,你必须停止该复制通道,然后才能更改主节点成员。你可以使用MEMBER_ROLE
列在性能chema的replication_group_members
表中确定当前主节点。
如果组中的所有成员都没有运行相同的MySQL Server版本,你可以指定一个运行最低MySQL Server版本的新主节点成员。这一安全措施是为了确保组保持与新函数的兼容性。
在操作完成之前,组中的任何未提交事务都必须被提交、回滚或终止。您可以指定从 0 秒(立即)到 3600 秒(60 分钟)的超时时间,以便在使用函数时处理正在运行的事务。超时设置没有默认值,如果不设置,等待时间的上限将是无限的,并且新的事务可以在该时间内开始。
当超时到期时,对于尚未达到提交阶段的事务,客户端会话将被断开,以防止事务继续进行。已经达到提交阶段的事务允许完成。当您设置超时时,它也会阻止从该点开始的新事务在主服务器上启动。明确定义的事务(使用START TRANSACTION
或BEGIN
语句)即使不修改任何数据,也将受到超时、断开和 incoming 事务阻塞的影响。为了允许在函数操作期间检查主服务器,单个不修改数据的语句(如Permitted Queries Under Consistency Rules中列出的)允许继续进行。
将要成为组新主服务器的成员的server_uuid
传递给函数,使用以下语句:
SELECT group_replication_set_as_primary(member_uuid);
您可以像这样添加超时:
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300)
检查超时状态,可以使用性能_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