组复制能够设置组成员在特定情况下要采取的操作。可以使用函数单独启用和禁用成员操作。服务器的成员操作配置也可以在它离开组后重置为默认值。
管理员(拥有 GROUP_REPLICATION_ADMIN
权限)可以使用 group_replication_enable_member_action
或 group_replication_disable_member_action
函数在组的主节点上配置成员操作。然后,成员操作配置(包括所有成员操作以及它们是启用还是禁用)使用组复制的组消息传播到其他组成员和加入的成员。因此,所有组成员都具有相同的成员操作配置。您还可以在不属于组的服务器上配置成员操作,只要安装了组复制插件即可。在这种情况下,成员操作配置不会传播到任何其他服务器。
如果您使用函数配置成员操作的服务器是组的一部分,则它必须是单主模式下组中的当前主节点,并且它必须是多数派的一部分。配置更改由组复制在内部跟踪,但未赋予 GTID 并且未写入二进制日志,因此不会传播到组外的任何服务器,例如下游副本。每次启用或禁用成员操作时,组复制都会增加其成员操作配置的版本号。
成员操作配置按如下方式传播给成员:
启动组时,引导组的服务器的成员操作配置将成为组的配置。
如果组的最低 MySQL 服务器版本支持成员操作,则加入的成员将在加入时进行的状态交换过程中接收组的成员操作配置。在这种情况下,加入的成员会将其自己的成员操作配置替换为组的配置。
如果支持成员操作的加入成员加入最低 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
权限的用户也是如此。它确实继续接受由复制线程执行的更新。