Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.4 复制语句  / 13.4.3 控制组复制的SQL语句  /  13.4.3.7 设置和重置组复制成员操作的函数

13.4.3.7 设置和重置组复制成员操作的函数

以下函数可用于启用和禁用组成员在特定情况下采取的操作,以及将配置重置为所有成员操作的默认设置。它们只能由具有 GROUP_REPLICATION_ADMIN特权或已弃用SUPER 特权的管理员使用。

group_replication_enable_member_action 您可以使用和 group_replication_disable_member_action 函数 在组的主要成员上配置成员操作 。成员操作配置,包括所有成员操作以及它们是否启用或禁用,然后使用组复制的组消息传播到其他组成员和加入成员。这意味着组成员在指定的情况下都会以相同的方式进行操作,您只需要使用 primary 上的功能即可。

只要安装了 Group Replication 插件,这些功能也可以在不属于组的服务器上使用。在这种情况下,成员操作配置不会传播到任何其他服务器。

group_replication_reset_member_actions 功能只能在不属于组的服务器上使用。它将成员操作配置重置为默认设置,并重置其版本号。服务器必须是可写的(read_only 系统变量设置为OFF)并且安装了 Group Replication 插件。

可用的成员操作如下:

mysql_disable_super_read_only_if_primary

此成员操作可从 MySQL 8.0.26 获得。它是在一个成员被选为组的主要成员之后进行的,即 event AFTER_PRIMARY_ELECTION。默认情况下启用成员操作。您可以使用函数禁用它 group_replication_disable_member_action() ,然后使用函数重新启用它 group_replication_enable_member_action()

当启用并执行此成员操作时,主服务器上的超级只读模式将被禁用,因此主服务器变为可读写并接受来自复制源服务器和客户端的更新。这是正常情况。

当此成员操作被禁用且未执行时,主节点在选举后仍处于超级只读模式。在此状态下,它不接受来自任何客户端的更新,即使是具有 CONNECTION_ADMINSUPER 权限的用户。它确实继续接受复制线程执行的更新。此设置意味着当一个组的目的是为另一个组提供辅助备份以实现容灾时,您可以确保辅助组与第一个保持同步。

mysql_start_failover_channels_if_primary

此成员操作可从 MySQL 8.0.27 获得。它是在一个成员被选为组的主要成员之后进行的,即 event AFTER_PRIMARY_ELECTION。默认情况下启用成员操作。您可以使用函数禁用它 group_replication_disable_member_action() ,然后使用函数重新启用它 group_replication_enable_member_action()

启用此成员操作后,当您 在通道SOURCE_CONNECTION_AUTO_FAILOVER=1CHANGE REPLICATION SOURCE TO语句上设置时,副本的异步连接故障转移对于 Group Replication primary 上的复制通道处于活动状态。When the feature is active and correctly configured, if the primary that is replicating goes offline or into an error state, the new primary starts replication on the same channel when it is elected. 这是正常情况。有关配置该功能的说明,请参阅 第 17.4.9.2 节,“副本的异步连接故障转移”

当禁用此成员操作时,副本不会发生异步连接故障转移。如果主节点脱机或进入错误状态,则该通道的复制将停止。请注意,如果有多个通道带有 SOURCE_CONNECTION_AUTO_FAILOVER=1,则成员操作会覆盖所有通道,因此无法通过此方法单独启用和禁用它们。设置 SOURCE_CONNECTION_AUTO_FAILOVER=0为禁用单个通道。

有关成员操作以及如何查看成员操作配置的更多信息,请参阅 第 18.5.1.5 节,“配置成员操作”

  • group_replication_enable_member_action()

    使成员能够在特定情况下执行成员操作。如果您使用该功能的服务器是组的一部分,则它必须是单主模式下组中的当前主服务器,并且必须是多数服务器的一部分。更改后的设置会传播到其他组成员和加入成员,因此他们在指定情况下都会以相同的方式进行操作,您只需要在 primary 上使用该功能即可。

    句法:

    STRING group_replication_enable_member_action(name, event)

    参数:

    • name:要启用的成员操作的名称。

    • event:触发​​成员操作的事件。

    返回值:

    包含操作结果的字符串,例如操作是否成功。

    例子:

    SELECT group_replication_enable_member_action("mysql_disable_super_read_only_if_primary", "AFTER_PRIMARY_ELECTION");

    有关详细信息,请参阅 第 18.5.1.5 节,“配置成员操作”

  • group_replication_disable_member_action()

    禁用成员操作,以便成员在指定情况下不执行它。如果您使用该功能的服务器是组的一部分,则它必须是单主模式下组中的当前主服务器,并且必须是多数服务器的一部分。更改后的设置会传播到其他组成员和加入成员,因此他们在指定情况下都会以相同的方式进行操作,您只需要在 primary 上使用该功能即可。

    句法:

    STRING group_replication_disable_member_action(name, event)

    参数:

    • name:要禁用的成员操作的名称。

    • event:触发​​成员操作的事件。

    返回值:

    包含操作结果的字符串,例如操作是否成功。

    例子:

    SELECT group_replication_disable_member_action("mysql_disable_super_read_only_if_primary", "AFTER_PRIMARY_ELECTION");

    有关详细信息,请参阅 第 18.5.1.5 节,“配置成员操作”

  • group_replication_reset_member_actions()

    将成员操作配置重置为默认设置,并将其版本号重置为 1。

    group_replication_reset_member_actions() 功能只能在当前不属于某个组的服务器上使用。服务器必须是可写的( read_only系统变量设置为OFF)并且安装了 Group Replication 插件。如果您打算将服务器用作没有成员操作或不同成员操作的独立服务器,则可以使用此功能删除服务器作为组的一部分时使用的成员操作配置。

    句法:

    STRING group_replication_reset_member_actions()

    参数:

    没有任何。

    返回值:

    包含操作结果的字符串,例如操作是否成功。

    例子:

    SELECT group_replication_reset_member_actions();

    有关详细信息,请参阅 第 18.5.1.5 节,“配置成员操作”