组复制能够为组中的成员设置在特定情况下采取的操作。可以使用函数分别启用和禁用成员操作。服务器的成员操作配置也可以在它离开组后重置为默认值。
管理员(具有 GROUP_REPLICATION_ADMIN
权限)可以使用 group_replication_enable_member_action
或 group_replication_disable_member_action
函数在组的主服务器上配置成员操作。成员操作配置(包含所有成员操作及其启用或禁用状态)随后通过组复制的组消息传播到其他组成员和加入的成员。因此,所有组成员都具有相同的成员操作配置。您也可以在未加入组的服务器上配置成员操作,只要安装了组复制插件。在这种情况下,成员操作配置不会传播到任何其他服务器。
如果使用函数配置成员操作的服务器是组的一部分,则它必须是单主模式下组的当前主服务器,并且必须是多数的一部分。配置更改由组复制在内部跟踪,但不会获得 GTID 且不会写入二进制日志,因此不会传播到组外部的任何服务器,例如下游副本。组复制在每次启用或禁用成员操作时都会增加其成员操作配置的版本号。
成员操作配置按如下方式传播到成员
在启动组时,引导组的服务器的成员操作配置将成为组的配置。
如果组的最低 MySQL 服务器版本支持成员操作,则加入的成员会在它们加入时发生的交换过程期间接收组的成员操作配置。在这种情况下,加入的成员会用组的成员操作配置替换它自己的成员操作配置。
如果支持成员操作的加入成员加入了最低 MySQL 服务器版本不支持成员操作的组,则它在加入时不会接收成员操作配置。在这种情况下,加入的成员会将它自己的配置重置为默认值。
不支持成员操作的成员无法加入具有成员操作配置的组,因为它的 MySQL 服务器版本低于现有组成员运行的最低版本。
Performance Schema 表 replication_group_member_actions
列出了配置中可用的成员操作、触发它们事件以及它们当前是否启用。成员操作具有从 1 到 100 的优先级,较低的值优先处理。如果在执行成员操作时发生错误,则可以记录成员操作的失败,但其他情况下会被忽略。如果成员操作的失败被认为是严重的,则可以根据 group_replication_exit_state_action
系统变量指定的策略进行处理。
可以使用 Performance Schema 表 replication_group_configuration_version
查看的 mysql.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
权限的用户。它会继续接受复制线程执行的更新。