以下函数使您能够将单主复制组的成员设置为接管主复制。当前主要成为只读次要,指定的组成员成为读写主要。该函数可用于以单主模式运行的复制组的任何成员。这个功能取代了通常的初选过程。 第 18.5.1.1 节,“更改组的主要成员” 解释了新主要成员的 MySQL 服务器版本要求。
如果除组复制通道外,现有主要成员上还运行标准源到副本复制通道,则必须先停止该复制通道,然后才能更改主要成员。MEMBER_ROLE
您可以使用Performance Schema 表中的列
replication_group_members
或
group_replication_primary_member
状态变量
来标识当前主节点。
组正在等待的任何未提交的事务必须在操作完成之前提交、回滚或终止。在 MySQL 8.0.29 之前,该函数等待现有主数据库上的所有活动事务结束,包括使用该函数后启动的传入事务。从 MySQL 8.0.29 开始,您可以在使用该函数时为正在运行的事务指定超时。为了使超时生效,该组的所有成员都必须使用 MySQL 8.0.29 或更高版本。
当超时到期时,对于任何尚未到达其提交阶段的事务,客户端会话将断开连接,以便事务不会继续。允许完成提交阶段的事务。当您设置超时时,它还会阻止新事务从那时起在主服务器上启动。显式定义的事务(使用START TRANSACTION
or
BEGIN
语句)会受到超时、断开连接和传入事务阻塞的影响,即使它们不修改任何数据也是如此。为了允许在函数运行时检查主函数,不修改数据的单个语句,如
一致性规则下允许的查询中所列, 被允许继续。
group_replication_set_as_primary()
指定该组的特定成员作为新的主要成员,覆盖任何选举过程。
句法:
STRING group_replication_set_as_primary(member_uuid[, timeout])
参数:
member_uuid
:一个字符串,其中包含要成为新主要成员的组成员的 UUID。timeout
:一个整数,指定使用该函数时在现有主数据库上运行的事务的超时秒数。您可以设置从 0 秒(立即)到 3600 秒(60 分钟)的超时。当您设置超时时,新事务无法从该点开始在主节点上启动。超时没有默认设置,所以如果你不设置它,等待时间没有上限,新的交易可以在这段时间内开始。这个选项从 MySQL 8.0.29 开始可用。
返回值:
包含操作结果的字符串,例如操作是否成功。
例子:
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300)
有关详细信息,请参阅 第 18.5.1.1 节,“更改组的主要成员”。