#### 13.4.2.12 配置源列表的函数

以下功能可从 MySQL 8.0.22 用于标准源到副本复制，从 MySQL 8.0.23 用于 Group Replication，使您能够从复制通道的源列表中添加和删除复制源服务器。从 MySQL 8.0.27 开始，您还可以清除服务器的源列表。

在从副本到其源的现有连接失败后，异步连接故障转移机制自动建立到适当列表中的新源的异步（源到副本）复制连接。从 MySQL 8.0.23 开始，如果当前连接的源在组中没有最高加权优先级，则连接也会更改。对于定义为受管组一部分的组复制源服务器，如果当前连接的源离开该组或不再占多数，连接也会故障转移到另一个组成员。有关该机制的更多信息，请参阅[第 17.4.9 节，“使用异步连接故障转移切换源和副本”](replication-asynchronous-connection-failover.html).

源列表存储在`mysql.replication_asynchronous_connection_failover`和`mysql.replication_asynchronous_connection_failover_managed`表，并且可以在 Performance Schema 表中查看[`replication_asynchronous_connection_failover`](performance-schema-replication-asynchronous-connection-failover-table.html).

如果复制通道位于副本之间的故障转移处于活动状态的组的组复制主节点上，则源列表会在所有组成员加入或通过任何方法更新时广播给所有组成员。副本之间的故障转移由`mysql_start_failover_channels_if_primary`成员操作，默认启用，可以使用[`group_replication_disable_member_action`](group-replication-functions-for-member-actions.html#function_group-replication-disable-member-action)功能。

-   [](<>) [`asynchronous_connection_failover_add_source()`](replication-functions-source-list.html#function_asynchronous-connection-failover-add-source)

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

    将复制源服务器的配置信息添加到复制通道的源列表中。

    句法：

    ```
    asynchronous_connection_failover_add_source(channel, host, port, network_namespace, weight)
    ```

    论据：

    -   *`渠道`*：此复制源服务器是源列表一部分的复制通道。

    -   *`主持人`*：此复制源服务器的主机名。

    -   *`港口`*：此复制源服务器的端口号。

    -   *`网络命名空间`*：此复制源服务器的网络命名空间。指定一个空字符串，因为此参数保留供将来使用。

    -   *`重量`*：此复制源服务器在复制通道的源列表中的优先级。优先级从 1 到 100，其中 100 为最高，50 为默认值。当异步连接故障转移机制激活时，通道的源列表中列出的替代源中具有最高优先级设置的源将被选择用于第一次连接尝试。如果此尝试不起作用，则副本按优先级降序尝试所有列出的源，然后从最高优先级的源重新开始。如果多个源具有相同的优先级，则副本对它们进行随机排序。从 MySQL 8.0.23 开始，如果当前连接的源不是组中权重最高的，则会激活异步连接故障转移机制。

        返回值：

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

        例子：

    ```
    SELECT asynchronous_connection_failover_add_source('channel2', '127.0.0.1', 3310, '', 80);
    +-------------------------------------------------------------------------------------------------+
    | asynchronous_connection_failover_add_source('channel2', '127.0.0.1', 3310, '', 80)              |
    +-------------------------------------------------------------------------------------------------+
    | Source configuration details successfully inserted.                                             |
    +-------------------------------------------------------------------------------------------------+
    ```

    有关详细信息，请参阅[第 17.4.9 节，“使用异步连接故障转移切换源和副本”](replication-asynchronous-connection-failover.html).

-   [](<>) [`asynchronous_connection_failover_delete_source()`](replication-functions-source-list.html#function_asynchronous-connection-failover-delete-source)

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

    从复制通道的源列表中删除复制源服务器的配置信息。

    句法：

    ```
    asynchronous_connection_failover_delete_source(channel, host, port, network_namespace)
    ```

    论据：

    -   *`渠道`*：此复制源服务器作为源列表一部分的复制通道。

    -   *`主持人`*：此复制源服务器的主机名。

    -   *`港口`*：此复制源服务器的端口号。

    -   *`网络命名空间`*：此复制源服务器的网络命名空间。指定一个空字符串，因为此参数保留供将来使用。

        返回值：

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

        例子：

    ```
    SELECT asynchronous_connection_failover_delete_source('channel2', '127.0.0.1', 3310, '');
    +------------------------------------------------------------------------------------------------+
    | asynchronous_connection_failover_delete_source('channel2', '127.0.0.1', 3310, '')              |
    +------------------------------------------------------------------------------------------------+
    | Source configuration details successfully deleted.                                             |
    +------------------------------------------------------------------------------------------------+
    ```

    有关详细信息，请参阅[第 17.4.9 节，“使用异步连接故障转移切换源和副本”](replication-asynchronous-connection-failover.html).

-   [](<>) [`asynchronous_connection_failover_add_managed()`](replication-functions-source-list.html#function_asynchronous-connection-failover-add-managed)

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

    将属于受管组（组复制组成员）的复制源服务器的配置信息添加到复制通道的源列表中。您只需要添加一个群组成员。副本会自动添加当前组成员资格中的其余部分，然后根据成员资格更改保持源列表更新。

    句法：

    ```
    asynchronous_connection_failover_add_managed(channel, managed_type, managed_name, host, port, network_namespace, primary_weight, secondary_weight)
    ```

    论据：

    -   *`渠道`*：此复制源服务器是源列表一部分的复制通道。

    -   *`托管类型`*：异步连接故障转移机制必须为此服务器提供的托管服务类型。当前接受的唯一值是`组复制`.

    -   *`托管名称`*：服务器所属的受管组的标识符。为了`组复制`托管服务，标识符是[`group_replication_group_name`](group-replication-options.html#sysvar_group_replication_group_name)系统变量。

    -   *`主持人`*：此复制源服务器的主机名。

    -   *`港口`*：此复制源服务器的端口号。

    -   *`网络命名空间`*：此复制源服务器的网络命名空间。指定一个空字符串，因为此参数保留供将来使用。

    -   *`主要重量`*：此复制源服务器在作为受管组的主服务器时，在复制通道的源列表中的优先级。权重从 1 到 100，其中 100 是最高的。对于初级来说，80 是一个合适的重量。如果当前连接的源不是组中权重最高的，则将激活异步连接故障转移机制。假设您将托管组设置为将较高的权重分配给主节点，将较低的权重分配给辅助节点，当主节点发生更改时，其权重会增加，并且副本会更改与它的连接。

    -   *`次要重量`*：此复制源服务器在复制通道的源列表中作为受管组中的辅助服务器时的优先级。权重从 1 到 100，其中 100 是最高的。对于中学，60 是合适的重量。

        返回值：

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

        例子：

    ```
    SELECT asynchronous_connection_failover_add_managed('channel2', 'GroupReplication', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', '127.0.0.1', 3310, '', 80, 60);
    +----------------------------------------------------------------------------------------------------------------------------------------------------+
    | asynchronous_connection_failover_add_source('channel2', 'GroupReplication', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', '127.0.0.1', 3310, '', 80, 60) |
    +----------------------------------------------------------------------------------------------------------------------------------------------------+
    | Source managed configuration details successfully inserted.                                                                                        |
    +----------------------------------------------------------------------------------------------------------------------------------------------------+
    ```

    有关详细信息，请参阅[第 17.4.9 节，“使用异步连接故障转移切换源和副本”](replication-asynchronous-connection-failover.html).

-   [](<>) [`asynchronous_connection_failover_delete_managed()`](replication-functions-source-list.html#function_asynchronous-connection-failover-delete-managed)

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

    从复制通道的源列表中删除整个托管组。使用此功能时，托管组中定义的所有复制源服务器都将从通道的源列表中删除。

    句法：

    ```
    asynchronous_connection_failover_delete_managed(channel, managed_name)
    ```

    论据：

    -   *`渠道`*：此复制源服务器作为源列表一部分的复制通道。

    -   *`托管名称`*：服务器所属的受管组的标识符。为了`组复制`托管服务，标识符是[`group_replication_group_name`](group-replication-options.html#sysvar_group_replication_group_name)系统变量。

        返回值：

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

        例子：

    ```
    SELECT asynchronous_connection_failover_delete_managed('channel2', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa');
    +-----------------------------------------------------------------------------------------------------+
    | asynchronous_connection_failover_delete_managed('channel2', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa') |
    +-----------------------------------------------------------------------------------------------------+
    | Source managed configuration details successfully deleted.                                          |
    +-----------------------------------------------------------------------------------------------------+
    ```

    有关详细信息，请参阅[第 17.4.9 节，“使用异步连接故障转移切换源和副本”](replication-asynchronous-connection-failover.html).

-   [](<>) [`asynchronous_connection_failover_reset()`](replication-functions-source-list.html#function_asynchronous-connection-failover-reset)

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

    删除所有与异步连接故障转移机制相关的设置。该函数清除性能模式表[`replication_asynchronous_connection_failover`](performance-schema-replication-asynchronous-connection-failover-table.html)和[`replication_asynchronous_connection_failover_managed`](performance-schema-replication-asynchronous-connection-failover-managed-table.html).

    这[`asynchronous_connection_failover_reset()`](replication-functions-source-list.html#function_asynchronous-connection-failover-reset)功能只能在当前不属于组的服务器上使用，并且没有任何复制通道正在运行。服务器必须是可写的（使用[`只读`](server-system-variables.html#sysvar_read_only)系统变量设置为`离开`) 并安装 Group Replication 插件。您可以使用此功能清理不再在托管组中使用的服务器。

    句法：

    ```
    STRING asynchronous_connection_failover_reset()
    ```

    论据：

    没有。

    返回值：

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

    例子：

    ```
    SELECT asynchronous_connection_failover_reset();
    ```

    有关详细信息，请参阅[第 17.4.9 节，“使用异步连接故障转移切换源和副本”](replication-asynchronous-connection-failover.html).
