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

以下函数可用于启用和禁用组成员在指定情况下执行的操作，以及将所有成员操作的配置重置为默认设置。它们只能由具有以下权限的管理员使用[`GROUP_REPLICATION_ADMIN`](privileges-provided.html#priv_group-replication-admin)特权或已弃用[`极好的`](privileges-provided.html#priv_super)特权。

您可以使用[`group_replication_enable_member_action`](group-replication-functions-for-member-actions.html#function_group-replication-enable-member-action)和[`group_replication_disable_member_action`](group-replication-functions-for-member-actions.html#function_group-replication-disable-member-action)职能。成员操作配置，包括所有成员操作以及它们是启用还是禁用，然后使用 Group Replication 的组消息传播到其他组成员和加入成员。这意味着组成员在指定情况下都会以相同的方式行动，您只需要在主节点上使用该功能。

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

这[`group_replication_reset_member_actions`](group-replication-functions-for-member-actions.html#function_group-replication-reset-member-actions)功能只能在不属于组的服务器上使用。它将成员操作配置重置为默认设置，并重置其版本号。服务器必须是可写的（使用[`只读`](server-system-variables.html#sysvar_read_only)系统变量设置为`离开`) 并安装 Group Replication 插件。

可用的成员操作如下：

`mysql_disable_super_read_only_if_primary`

此成员操作可从 MySQL 8.0.26 获得。它是在成员被选为组的主要成员之后采取的，这是事件`AFTER_PRIMARY_ELECTION`.默认情况下启用成员操作。您可以使用禁用它[`group_replication_disable_member_action()`](group-replication-functions-for-member-actions.html#function_group-replication-disable-member-action)功能，并重新启用它使用[`group_replication_enable_member_action()`](group-replication-functions-for-member-actions.html#function_group-replication-enable-member-action)功能。

启用并执行此成员操作后，主节点上将禁用超级只读模式，以便主节点变为读写并接受来自复制源服务器和客户端的更新。这是正常情况。

当此成员操作被禁用且未执行时，主节点在选举后仍处于超级只读模式。在这种状态下，它不接受来自任何客户端的更新，即使是拥有[`CONNECTION_ADMIN`](privileges-provided.html#priv_connection-admin)要么[`极好的`](privileges-provided.html#priv_super)特权。它确实继续接受复制线程执行的更新。这种设置意味着当一个组的目的是为另一个组提供辅助备份以进行容灾时，您可以确保辅助组与第一个组保持同步。

`mysql_start_failover_channels_if_primary`

此成员操作可从 MySQL 8.0.27 获得。它是在成员被选为组的主要成员后采取的，即事件`AFTER_PRIMARY_ELECTION`.默认情况下启用成员操作。您可以使用禁用它[`group_replication_disable_member_action()`](group-replication-functions-for-member-actions.html#function_group-replication-disable-member-action)功能，并重新启用它使用[`group_replication_enable_member_action()`](group-replication-functions-for-member-actions.html#function_group-replication-enable-member-action)功能。

启用此成员操作后，当您设置`SOURCE_CONNECTION_AUTO_FAILOVER=1`在[`将复制源更改为`](change-replication-source-to.html)频道的声明。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 节，“副本的异步连接故障转移”](replication-asynchronous-connection-failover-replica.html).

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

有关成员操作以及如何查看成员操作配置的更多信息，请参阅[第 18.5.1.5 节，“配置成员操作”](group-replication-member-actions.html).

-   [](<>) [`group_replication_enable_member_action()`](group-replication-functions-for-member-actions.html#function_group-replication-enable-member-action)

    [](<>)[](<>)

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

    句法：

    ```
    STRING group_replication_enable_member_action(name, event)
    ```

    论据：

    -   *`姓名`*：要启用的成员操作的名称。

    -   *`事件`*：触发​​成员动作的事件。

        返回值：

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

        例子：

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

    有关详细信息，请参阅[第 18.5.1.5 节，“配置成员操作”](group-replication-member-actions.html).

-   [](<>) [`group_replication_disable_member_action()`](group-replication-functions-for-member-actions.html#function_group-replication-disable-member-action)

    [](<>)[](<>)

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

    句法：

    ```
    STRING group_replication_disable_member_action(name, event)
    ```

    论据：

    -   *`姓名`*：要禁用的成员操作的名称。

    -   *`事件`*：触发​​成员动作的事件。

        返回值：

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

        例子：

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

    有关详细信息，请参阅[第 18.5.1.5 节，“配置成员操作”](group-replication-member-actions.html).

-   [](<>) [`group_replication_reset_member_actions()`](group-replication-functions-for-member-actions.html#function_group-replication-reset-member-actions)

    [](<>)[](<>)

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

    这[`group_replication_reset_member_actions()`](group-replication-functions-for-member-actions.html#function_group-replication-reset-member-actions)功能只能在当前不属于组的服务器上使用。服务器必须是可写的（使用[`只读`](server-system-variables.html#sysvar_read_only)系统变量设置为`离开`) 并安装 Group Replication 插件。如果您打算将其用作没有成员操作或不同成员操作的独立服务器，则可以使用此功能删除服务器在属于组时使用的成员操作配置。

    句法：

    ```
    STRING group_replication_reset_member_actions()
    ```

    论据：

    没有。

    返回值：

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

    例子：

    ```
    SELECT group_replication_reset_member_actions();
    ```

    有关详细信息，请参阅[第 18.5.1.5 节，“配置成员操作”](group-replication-member-actions.html).
