Documentation Home
MySQL 8.0 参考手册  / 第十八章 组复制  / 18.5 组复制操作  / 18.5.1 配置在线群组  /  18.5.1.1 更改组的主要成员

18.5.1.1 更改组的主要成员

本节介绍如何更改单一主要组的哪个成员是主要成员。用于更改组模式的函数可以在任何成员上运行。

更改哪个成员是主要成员

使用该 group_replication_set_as_primary() 函数更改哪个成员是单一主要组中的主要成员。当前主要成为只读次要,指定的组成员成为读写主要。该函数可用于以单主模式运行的复制组的任何成员。它取代了第 18.1.3.1 节“单主模式”中描述的通常的主选举过程 。

如果除组复制通道外,现有主要成员上还运行标准源到副本复制通道,则必须先停止该复制通道,然后才能更改主要成员。MEMBER_ROLE 您可以使用Performance Schema 表中的列 replication_group_membersgroup_replication_primary_member 状态变量 来标识当前主节点。

如果您在运行 8.0.17 版 MySQL 服务器的成员上调用该函数,并且所有成员都运行 8.0.17 版或更高版本的 MySQL 服务器,则只能指定一个运行最低 MySQL 服务器版本的新主成员组,基于补丁版本。应用此保护措施以确保该组保持与新功能的兼容性。如果任何成员正在运行 MySQL 8.0.13 和 MySQL 8.0.16 之间的 MySQL 服务器版本,则不会对该组强制执行此保护措施,您可以指定任何新的主要成员,但建议选择运行最低的主要成员组中的 MySQL 服务器版本。

组正在等待的任何未提交的事务必须在操作完成之前提交、回滚或终止。在 MySQL 8.0.29 之前,该函数等待现有主数据库上的所有活动事务结束,包括使用该函数后启动的传入事务。从 MySQL 8.0.29 开始,您可以为使用该函数时正在运行的事务指定从 0 秒(立即)到 3600 秒(60 分钟)的超时。为了使超时生效,该组的所有成员都必须使用 MySQL 8.0.29 或更高版本。超时没有默认设置,所以如果你不设置它,等待时间没有上限,新的交易可以在这段时间内开始。

当超时到期时,对于任何尚未到达其提交阶段的事务,客户端会话将断开连接,以便事务不会继续。允许完成提交阶段的事务。当您设置超时时,它还会阻止新事务从那时起在主服务器上启动。显式定义的事务(使用START TRANSACTIONorBEGIN语句)会受到超时、断开连接和传入事务阻塞的影响,即使它们不修改任何数据也是如此。为了允许在函数运行时检查主函数,不修改数据的单个语句,如 一致性规则下允许的查询中所列, 被允许继续。

通过发出以下命令传递server_uuid您希望成为该组新主要成员的成员:

SELECT group_replication_set_as_primary(member_uuid);

从 MySQL 8.0.29 开始,您可以添加超时,例如:

SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300)

要检查超时状态,请使用 PROCESSLIST_INFO性能模式线程表中的列:

SELECT NAME, PROCESSLIST_INFO FROM performance_schema.threads WHERE NAME=\"thread/group_rpl/THD_transaction_monitor\";
+---------------------------------------------+----------------------------------------------------------------------+
| NAME                                        | PROCESSLIST_INFO                                                     |
+--------------------------------------------------------------------------------------------------------------------+
| thread/group_rpl/THD_transaction_monitor    | Group replication transaction monitor: Stopped client connections    |
+--------------------------------------------------------------------------------------------------------------------+

状态显示事务监视线程何时创建,新事务何时停止,未提交事务的客户端连接何时断开,最后,该过程何时完成并再次允许新事务。

在操作运行时,您可以通过发出以下命令来检查其进度:

SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";
+----------------------------------------------------------------------------------+----------------+----------------+
| event_name                                                                       | work_completed | work_estimated |
+----------------------------------------------------------------------------------+----------------+----------------+
| stage/group_rpl/Primary Election: Waiting for members to turn on super_read_only |              3 |              5 |
+----------------------------------------------------------------------------------+----------------+----------------+