以下函数允许您设置单主复制组的成员接管主库的角色。当前主库将变为只读辅助库,而指定的组成员将变为读写主库。该函数可以在以单主模式运行的复制组的任何成员上使用。此函数取代了通常的主库选举过程;有关更多信息,请参阅第 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.4 中,它还会等待任何正在进行的 DDL 语句(例如
ALTER TABLE
)完成。为此目的被视为 DDL 语句的操作如下所示:ALTER TABLE
这还包括任何打开的游标(请参阅第 15.6.6 节 “游标”)。
有关更多信息,请参阅第 20.5.1.1 节 “更改主库”。