14.18.1.1 配置组复制主节点的函数
以下函数可以将单一主节点复制组中的一个成员设置为新的主节点。当前主节点变为只读副本,而指定的组成员变为可写主节点。这款函数可以在任何运行在单一主模式下的复制组成员上使用。这款函数替代了通常的主选举过程;请参阅第20.5.1.1节,“更改主节点”,了解更多信息。
如果在现有主成员上运行的标准源到副本复制通道(除了Group Replication通道),那么您必须停止该复制通道才能更改主成员。您可以使用replication_group_members
表中的MEMBER_ROLE
列来确定当前主成员。
组等待的未提交事务必须被提交、回滚或终止才能完成操作。您可以在使用函数时指定运行的事务超时时间。为了使超时生效,所有组成员都必须是MySQL 8.0.29或更高版本。
当超时到期,尚未达到提交阶段的所有事务将会断开客户端会话,以防止事务继续进行。已经达到提交阶段的事务允许完成。当您设置超时,它也会阻止从primary开始新的事务。使用明确定义的事务(带有START TRANSACTION
或BEGIN
语句)即使它们不修改任何数据,也将受到超时、断开和 incoming 事务阻塞的影响。为了允许在函数操作期间检查primary,单个不修改数据的语句(如Consistency Rules中列出的),仍然允许继续进行。
-
group_replication_set_as_primary()
将特定组成员指定为新的primary,override任何选举过程。
语法:
STRING group_replication_set_as_primary(member_uuid[, timeout])
参数:
-
member_uuid
:包含要成为新primary的组成员UUID的字符串。 -
timeout
: 一个整数,指定在使用该函数时对现有主服务器的事务超时时间,以秒为单位。您可以将超时设置从 0 秒(立即)到 3600 秒(60 分钟)。当您设置超时时,新的事务不能在主服务器上启动。没有超时的默认设置,因此如果不设置超时,等待时间没有限制,新的事务可以在该时间内启动。
返回值:
一个字符串,包含操作结果,例如是否成功或否。
示例:
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300);
这个函数等待所有正在进行的事务和 DML 操作完成,然后选举新的主服务器。在 MySQL 8.4 中,它还等待任何正在进行的 DDL 语句,例如
ALTER TABLE
。为这个目的考虑的 DDL 语句列表如下:-
ALTER TABLE
这还包括任何打开的游标(见第15.6.6节,“Cursors”)。
-