以下函数使您能够设置单主复制组的成员以接管为主节点。当前主节点变为只读从节点,而指定的组成员变为读写主节点。该函数可以在运行在单主模式下的任何复制组成员上使用。此函数取代了通常的主节点选举过程;有关更多信息,请参见 第 20.5.1.1 节,“更改主节点”。
如果除了组复制通道之外,现有主节点成员上还运行着标准源到副本的复制通道,则必须在更改主节点成员之前停止该复制通道。您可以使用 Performance Schema 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 9.0 中,它还将等待任何正在进行的 DDL 语句(例如
ALTER TABLE
)完成。被视为 DDL 语句的操作如下所示ALTER TABLE
这还包括任何打开的光标(请参见 第 15.6.6 节,“光标”)。
有关更多信息,请参见 第 20.5.1.1 节,“更改主节点”。