从 MySQL 8.0.26 开始,组复制具有设置组成员在指定情况下的操作的能力。成员操作可以单独启用和禁用使用函数。服务器离开组后,也可以将成员操作配置重置为默认值。
管理员(具有 GROUP_REPLICATION_ADMIN
权限)可以使用 group_replication_enable_member_action
或 group_replication_disable_member_action
函数在组的主服务器上配置成员操作。然后,成员操作配置将被传播到其他组成员和加入的成员使用组复制的组消息。所有组成员因此都具有相同的成员操作配置。你也可以在不属于组的服务器上配置成员操作,只要安装了组复制插件。在那种情况下,成员操作配置不会被传播到任何其他服务器。
如果你使用函数来配置成员操作的服务器是组的一部分,那么它必须是单一主模式下的当前主服务器,并且必须是多数派的一部分。配置更改将被组复制内部跟踪,但它不会被分配 GTID,也不会被写入二进制日志,因此它不会被传播到组外的服务器,例如下游副本。组复制每次启用或禁用成员操作时都会增加成员操作配置的版本号。
成员操作配置将被传播到成员服务器,如下所示:
-
启动组时,引导组的服务器的成员操作配置将成为组的配置。
-
如果组的最低 MySQL 服务器版本支持成员操作,加入的成员将在加入过程中接收组的成员操作配置。在那种情况下,加入的成员将用组的成员操作配置替换自己的成员操作配置。
-
如果加入的成员支持成员操作加入了不支持成员操作的组,那么它在加入时不会接收成员操作配置。在那种情况下,加入的成员将其自己的配置重置为默认值。
不支持成员操作的成员不能加入具有成员操作配置的组,因为其 MySQL 服务器版本低于现有组成员正在运行的最低版本。
性能模式表 replication_group_member_actions
列出了可用的成员操作、触发它们的事件以及它们当前是否启用。成员操作具有 1 到 100 之间的优先级,较低的值将首先执行。如果成员操作执行时发生错误,可以记录失败但忽略。如果成员操作的失败被认为是关键的,可以根据 group_replication_exit_state_action
系统变量指定的策略来处理。
表 mysql.replication_group_configuration_version
,可以通过性能模式表 replication_group_configuration_version
查看,记录了当前的成员操作配置版本号。每次使用函数启用或禁用成员操作时,版本号都会增加。
函数 group_replication_reset_member_actions
只能在不属于组的服务器上使用。它将成员操作配置重置为默认设置,并将版本号重置为 1。服务器必须是可写的(read_only
系统变量设置为 OFF
),并且必须安装了组复制插件。你可以使用这个函数来删除服务器在组成员时使用的成员操作配置,如果你想使用它作为独立服务器没有成员操作或不同的成员操作。
成员操作 mysql_disable_super_read_only_if_primary
可以配置,使单一主模式下的组在选举新主服务器时保持超级只读模式,以便组仅接受复制事务,不接受来自客户端的任何直接写入。这样设置意味着,当组的目的是为另一个组提供灾难恢复备份时,可以确保次要组与第一个组保持同步。
默认情况下,在选举后,超级只读模式将在主服务器上禁用,以便主服务器变为读写模式,并接受来自复制源服务器和客户端的更新。如果启用成员操作 mysql_disable_super_read_only_if_primary
,这是其默认设置。 如果使用 group_replication_disable_member_action
函数将操作设置为禁用,那么在选举后,主服务器将保持超级只读模式。在这种状态下,它不接受来自任何客户端的更新,甚至是具有 CONNECTION_ADMIN
或 SUPER
权限的用户。它继续接受复制线程执行的更新。