以下函数允许您将单个主复制组的成员设置为新的主服务器。当前的主服务器变为只读次要服务器,而指定的组成员变为读写主服务器。该函数可以在单个主复制组的任何成员上使用,该函数替换了通常的主服务器选举过程;见 第 20.5.1.1 节,“更改主服务器”,以获取更多信息。
如果在现有的主服务器成员上运行标准源到副本复制通道,除了组复制通道外,您必须在更改主服务器成员之前停止该复制通道。您可以使用性能架构 replication_group_members
表中的 MEMBER_ROLE
列来标识当前的主服务器。
组等待的任何未提交的事务必须在操作完成之前提交、回滚或终止。您可以指定事务的超时时间。当您使用该函数时,所有组成员必须是 MySQL 8.0.29 或更高版本。
当超时期限到期时,对于尚未达到提交阶段的事务,客户端会话将断开,以便事务不再继续。已经达到提交阶段的事务将被允许完成。当您设置超时时间时,也将阻止从该点开始的新事务启动。明确定义的事务(使用 START TRANSACTION
或 BEGIN
语句)将受到超时、断开和入站事务阻止,即使它们不修改任何数据。为了允许在函数操作期间检查主服务器,单个语句不修改数据,如 一致性规则下的允许查询 中所列举的,将被允许继续。
-
group_replication_set_as_primary()
任命组中的特定成员为新的主服务器,覆盖任何选举过程。
语法:
STRING group_replication_set_as_primary(member_uuid[, timeout])
参数:
-
member_uuid
:一个字符串,包含要成为新的主服务器的组成员的 UUID。 -
timeout
:一个整数,指定在使用该函数时现有主服务器上的事务超时时间(以秒为单位)。您可以设置从 0 秒(立即)到 3600 秒(60 分钟)的超时时间。当您设置超时时间时,从该点开始的新事务将不能启动。在不设置超时时间的情况下,没有等待时间的上限,新事务可以在该时间内启动。
返回值:
一个字符串,包含操作的结果,例如是否成功。
示例:
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300);
该函数等待所有正在进行的事务和 DML 操作完成,然后选举新的主服务器。在 MySQL 8.3 中,它还等待任何正在进行的 DDL 语句,例如
ALTER TABLE
。以下是该函数认为的 DDL 语句:-
ALTER TABLE
这也包括任何打开的游标(见 第 15.6.6 节,「游标」)。
有关更多信息,请参见 第 20.5.1.1 节,「更改主服务器」。
-