Documentation Home

18.5.1.2 改变组模式

本节介绍如何更改组运行的模式,单主模式或多主模式。用于更改组模式的函数可以在任何成员上运行。

更改为单主模式

通过发出以下命令,使用该 group_replication_switch_to_single_primary_mode() 函数将以多主模式运行的组更改为单主模式:

SELECT group_replication_switch_to_single_primary_mode()

当您更改为单主模式时,也会根据单主模式 ( group_replication_enforce_update_everywhere_checks=OFF) 的要求对所有组成员禁用严格的一致性检查。

如果没有传入字符串,则在生成的单主组中选举新的主节点将遵循 第 18.1.3.1 节“单主节点模式”中描述的选举策略。要覆盖选举过程并将多主组的特定成员配置为过程中的新主,请获取server_uuid该成员的 并将其传递给 group_replication_switch_to_single_primary_mode()。例如,问题:

SELECT group_replication_switch_to_single_primary_mode(member_uuid);

如果您在运行 8.0.17 版 MySQL 服务器的成员上调用该函数,并且所有成员都运行 8.0.17 版或更高版本的 MySQL 服务器,则只能指定一个运行最低 MySQL 服务器版本的新主成员组,基于补丁版本。应用此保护措施以确保该组保持与新功能的兼容性。如果不指定新的主要成员,则选举过程会考虑组成员的补丁版本。

如果任何成员正在运行 MySQL 8.0.13 和 MySQL 8.0.16 之间的 MySQL 服务器版本,则不会对该组强制执行此保护措施,您可以指定任何新的主要成员,但建议选择运行最低的主要成员组中的 MySQL 服务器版本。如果不指定新的主要成员,则选举过程只考虑组成员的主要版本。

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

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 Switch: waiting for pending transactions to finish |              4 |             20 |
+----------------------------------------------------------------------------+----------------+----------------+
更改为多主模式

通过发出以下命令,使用该 group_replication_switch_to_multi_primary_mode() 函数将以单主模式运行的组更改为多主模式:

SELECT group_replication_switch_to_multi_primary_mode()

经过一些协调组操作以确保数据的安全性和一致性后,属于该组的所有成员都成为主要成员。

当您将以单主模式运行的组更改为以多主模式运行时,运行 MySQL 8.0.17 或更高版本的成员如果运行的 MySQL 服务器版本高于最低版本,则会自动置于只读模式存在于组中。运行 MySQL 8.0.16 或更低版本的成员不进行此检查,并始终置于读写模式。

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

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/Multi-primary Switch: applying buffered transactions |              0 |              1 |
+----------------------------------------------------------------------+----------------+----------------+