

# 管理多源复制
<a name="mysql-stored-proc-multi-source-replication"></a>

以下存储过程在 RDS for MySQL 多源副本上设置和管理复制通道。有关更多信息，请参阅 [为 Amazon RDS for MySQL 配置多源复制](mysql-multi-source-replication.md)。

这些存储过程仅适用于运行以下引擎版本的 RDS for MySQL 数据库实例：
+ 所有 8.4 版本
+ 8.0.35 及更高的次要版本
+ 5.7.44 及更高的次要版本

在使用这些存储过程管理复制时，如果其复制用户配置了 `caching_sha2_passwword`，则必须通过指定 `SOURCE_SSL=1` 来配置 TLS。`caching_sha2_password` 是 RDS for MySQL 8.4 的默认身份验证插件。

**注意**  
尽管本文档将源数据库实例称为 RDS for MySQL 数据库实例，但这些过程也适用于在 Amazon RDS 外部运行的 MySQL 实例。

**Topics**
+ [mysql.rds\$1next\$1source\$1log\$1for\$1channel](#mysql_rds_next_source_log_for_channel)
+ [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel)
+ [mysql.rds\$1set\$1external\$1source\$1for\$1channel](#mysql_rds_set_external_source_for_channel)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel](#mysql_rds_set_external_source_with_auto_position_for_channel)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel](#mysql_rds_set_external_source_with_delay_for_channel)
+ [mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel](#mysql_rds_set_source_auto_position_for_channel)
+ [mysql.rds\$1set\$1source\$1delay\$1for\$1channel](#mysql_rds_set_source_delay_for_channel)
+ [mysql.rds\$1skip\$1repl\$1error\$1for\$1channel](#mysql_rds_skip_repl_error_for_channel)
+ [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)
+ [mysql.rds\$1start\$1replication\$1until\$1for\$1channel](#mysql_rds_start_replication_until_for_channel)
+ [mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel](#mysql_rds_start_replication_until_gtid_for_channel)
+ [mysql.rds\$1stop\$1replication\$1for\$1channel](#mysql_rds_stop_replication_for_channel)

## mysql.rds\$1next\$1source\$1log\$1for\$1channel
<a name="mysql_rds_next_source_log_for_channel"></a>

将源数据库实例日志位置更改为通道的源数据库实例上下一个二进制日志的开始位置。只有在多源副本上收到复制 I/O 错误 1236 时，才能使用该过程。

### 语法
<a name="mysql_rds_next_source_log_for_channel-syntax"></a>

 

```
CALL mysql.rds_next_source_log_for_channel(
curr_master_log,
channel_name           
);
```

### 参数
<a name="mysql_rds_next_source_log_for_channel-parameters"></a>

 *curr\$1master\$1log*  
当前源日志文件的索引。例如，如果当前文件名为 `mysql-bin-changelog.012345`，则索引为 12345。要确定当前源日志文件名，请运行 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'` 命令并查看 `Source_Log_File` 字段。

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_next_source_log_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_next_source_log_for_channel` 过程。例如，如果出现 IO\$1Thread 错误，则可以使用此过程跳过当前二进制日志文件中的所有事件，并从在 `channel_name` 中指定的通道的下一个二进制日志文件中恢复复制。

### 示例
<a name="mysql_rds_group_replication_advance_gtid-examples"></a>

假设在多源副本的通道上复制失败。对多源副本运行 `SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G` 会返回以下结果：

```
mysql> SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: ReplicationUser
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: replica-relay-bin.000003
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:.
              .
              .
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
               .
               .
                 Channel_name: channel_1
              .
              .
 -- Some fields are omitted in this example output
```

`Last_IO_Errno` 字段显示该实例收到 I/O 错误 1236。`Source_Log_File` 字段显示文件名为 `mysql-bin-changelog.012345`，这意味着日志文件索引为 `12345`。要纠正该错误，您可以使用以下参数调用 `mysql.rds_next_source_log_for_channel`：

```
CALL mysql.rds_next_source_log_for_channel(12345,'channel_1');
```

## mysql.rds\$1reset\$1external\$1source\$1for\$1channel
<a name="mysql_rds_reset_external_source_for_channel"></a>

停止指定通道上的复制过程，并从多源副本中移除该通道和关联的配置。

**重要**  
要运行此过程，必须启用 `autocommit`。要启用它，请将 `autocommit` 参数设置为 `1`。有关修改参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

### 语法
<a name="mysql_rds_reset_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_reset_external_source_for_channel (channel_name);
```

### 参数
<a name="mysql_rds_reset_external_source_for_channel-parameters"></a>

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_reset_external_source_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_reset_external_source_for_channel` 过程。此过程将删除属于要移除的通道的所有中继日志。

## mysql.rds\$1set\$1external\$1source\$1for\$1channel
<a name="mysql_rds_set_external_source_for_channel"></a>

在 RDS for MySQL 数据库实例上配置复制通道，以从另一个 RDS for MySQL 数据库实例复制数据。

**重要**  
要运行此过程，必须启用 `autocommit`。要启用它，请将 `autocommit` 参数设置为 `1`。有关修改参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

**注意**  
您可以改用 [mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel](#mysql_rds_set_external_source_with_delay_for_channel) 存储过程为该通道配置延迟复制。

### 语法
<a name="mysql_rds_set_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_set_external_source_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , channel_name
);
```

### 参数
<a name="mysql_rds_set_external_source_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 源数据库实例的主机名或 IP 地址。

 *host\$1port*   
RDS for MySQL 源数据库实例使用的端口。如果网络配置包括转换端口号的安全 Shell (SSH) 端口复制，请指定由 SSH 公开的端口号。

 *replication\$1user\$1name*   
对 RDS for MySQL 源数据库实例具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限的用户的 ID。建议您向专用于复制的账户提供源数据库实例。

 *replication\$1user\$1password*   
在 `replication_user_name` 中指定的用户 ID 的密码。

 *mysql\$1binary\$1log\$1file\$1name*   
源数据库实例上包含复制信息的二进制日志的名称。

 *mysql\$1binary\$1log\$1file\$1location*   
`mysql_binary_log_file_name` 二进制日志中复制将开始读取复制信息的位置。  
您可以通过在源数据库实例上运行 `SHOW BINARY LOG STATUS` 来确定二进制日志文件名和位置。  
以前的 MySQL 版本使用的是 `SHOW MASTER STATUS`，而不是 `SHOW BINARY LOG STATUS`。如果您使用的 MySQL 版本低于 8.4，请使用 `SHOW MASTER STATUS`。

 *ssl\$1encryption*   
指定是否在复制连接中使用安全套接字层（SSL）加密的值。1 表示使用 SSL 加密，0 表示不使用加密。默认值为 0。  
不支持 `SOURCE_SSL_VERIFY_SERVER_CERT` 选项。此选项设置为 0，这意味着连接已加密，但未验证证书。

 *channel\$1name*   
复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_set_external_source_for_channel-usage-notes"></a>

 主用户必须运行 `mysql.rds_set_external_source_for_channel` 过程。此过程必须在您要创建复制通道的目标 RDS for MySQL 数据库实例上运行。

 在运行 `mysql.rds_set_external_source_for_channel` 之前，请为源数据库实例上的复制用户配置多源副本所需的权限。要将多源副本连接到源数据库实例，必须指定对源数据库实例拥有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限的复制用户的 `replication_user_name` 和 `replication_user_password` 值。

**在源数据库实例上配置复制用户**

1. 通过使用所选的 MySQL 客户端，连接到源数据库实例并创建要用于复制的用户账户。示例如下：
**重要**  
作为安全最佳实践，请指定除以下示例中所示占位符值以外的密码。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 在源数据库实例上，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。以下示例向您所在域的“repl\$1user”用户授予对所有数据库的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com';
   ```

要使用加密复制，请将源数据库实例配置为使用 SSL 连接。

在调用 `mysql.rds_set_external_source_for_channel` 以配置此复制通道后，可以在副本上调用 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 以启动通道上的复制过程。您可以调用 [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) 以停止通道上的复制，并从副本中移除通道配置。

当您调用 `mysql.rds_set_external_source_for_channel` 时，Amazon RDS 将时间、用户和 `set channel source` 的操作记录在 `mysql.rds_history` 表（不包括通道特定的详细信息）和 `mysql.rds_replication_status` 表中，并包含通道名称。此信息仅用于内部使用和监控目的。要记录完整的过程调用以进行审核，请考虑根据应用程序的特定要求启用审核日志或常规日志。

### 示例
<a name="mysql_rds_set_external_source_for_channel-examples"></a>

在 RDS for MySQL 数据库实例上运行时，以下示例将此数据库实例上名为 `channel_1` 的复制通道配置为从由主机 `sourcedb.example.com` 和端口 `3306` 指定的源复制数据。

```
call mysql.rds_set_external_source_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  0,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_external_source_with_auto_position_for_channel"></a>

在 RDS for MySQL 数据库实例上配置一个复制通道，复制延迟为可选项。复制基于全局事务标识符（GTID）。

**重要**  
要运行此过程，必须启用 `autocommit`。要启用它，请将 `autocommit` 参数设置为 `1`。有关修改参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

### 语法
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_auto_position_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
  , channel_name
);
```

### 参数
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 源数据库实例的主机名或 IP 地址。

 *host\$1port*   
RDS for MySQL 源数据库实例使用的端口。如果网络配置包括转换端口号的安全 Shell (SSH) 端口复制，请指定由 SSH 公开的端口号。

 *replication\$1user\$1name*   
对 RDS for MySQL 源数据库实例具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限的用户的 ID。建议您向专用于复制的账户提供源数据库实例。

 *replication\$1user\$1password*   
在 `replication_user_name` 中指定的用户 ID 的密码。

 *ssl\$1encryption*   
指定是否在复制连接中使用安全套接字层（SSL）加密的值。1 表示使用 SSL 加密，0 表示不使用加密。默认值为 0。  
不支持 `SOURCE_SSL_VERIFY_SERVER_CERT` 选项。此选项设置为 0，这意味着连接已加密，但未验证证书。

 *delay*   
延迟从源数据库实例复制的最小秒数。  
该参数的限制为一天（86400 秒）。

 *channel\$1name*   
复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_set_external_source_with_auto_position_for_channel` 过程。此过程必须在您要创建复制通道的目标 RDS for MySQL 数据库实例上运行。

在运行 `rds_set_external_source_with_auto_position_for_channel` 之前，请为源数据库实例上的复制用户配置多源副本所需的权限。要将多源副本连接到源数据库实例，必须指定对源数据库实例拥有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限的复制用户的 `replication_user_name` 和 `replication_user_password` 值。

**在源数据库实例上配置复制用户**

1. 通过使用所选的 MySQL 客户端，连接到源数据库实例并创建要用于复制的用户账户。示例如下：
**重要**  
作为安全最佳实践，请指定除以下示例中所示占位符值以外的密码。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 在源数据库实例上，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。以下示例向您所在域的“repl\$1user”用户授予对所有数据库的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com';
   ```

要使用加密复制，请将源数据库实例配置为使用 SSL 连接。

在调用 `mysql.rds_set_external_source_with_auto_position_for_channel` 之前，务必调用 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_gtid_purged)，以便使用来自外部源的指定 GTID 范围设置 `gtid_purged` 系统变量。

在调用 `mysql.rds_set_external_source_with_auto_position_for_channel` 以将 Amazon RDS 数据库实例配置为特定通道上的只读副本后，可以在只读副本上调用 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 以启动该通道上的复制过程。

在调用 `mysql.rds_set_external_source_with_auto_position_for_channel` 以配置此复制通道后，可以在副本上调用 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 以启动通道上的复制过程。您可以调用 [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) 以停止通道上的复制，并从副本中移除通道配置。

### 示例
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-examples"></a>

在 RDS for MySQL 数据库实例上运行时，以下示例将此数据库实例上名为 `channel_1` 的复制通道配置为从由主机 `sourcedb.example.com` 和端口 `3306` 指定的源复制数据。它将最小复制延迟设置为一小时（3600 秒）。这意味着，来自源 RDS for MySQL 数据库实例的更改在至少一个小时内不会在多源副本上应用。

```
call mysql.rds_set_external_source_with_auto_position_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel
<a name="mysql_rds_set_external_source_with_delay_for_channel"></a>

在 RDS for MySQL 数据库实例上配置一个具有指定复制延迟的复制通道。

**重要**  
要运行此过程，必须启用 `autocommit`。要启用它，请将 `autocommit` 参数设置为 `1`。有关修改参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

### 语法
<a name="mysql_rds_set_external_source_with_delay_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_delay_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
  , channel_name
);
```

### 参数
<a name="mysql_rds_set_external_source_with_delay_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 源数据库实例的主机名或 IP 地址。

 *host\$1port*   
RDS for MySQL 源数据库实例使用的端口。如果网络配置包括转换端口号的安全 Shell (SSH) 端口复制，请指定由 SSH 公开的端口号。

 *replication\$1user\$1name*   
对 RDS for MySQL 源数据库实例具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限的用户的 ID。建议您向专用于复制的账户提供源数据库实例。

 *replication\$1user\$1password*   
在 `replication_user_name` 中指定的用户 ID 的密码。

 *mysql\$1binary\$1log\$1file\$1name*   
源数据库实例上包含复制信息的二进制日志的名称。

 *mysql\$1binary\$1log\$1file\$1location*   
`mysql_binary_log_file_name` 二进制日志中复制将开始读取复制信息的位置。  
您可以通过在源数据库实例上运行 `SHOW BINARY LOG STATUS` 来确定二进制日志文件名和位置。  
以前的 MySQL 版本使用的是 `SHOW MASTER STATUS`，而不是 `SHOW BINARY LOG STATUS`。如果您使用的 MySQL 版本低于 8.4，请使用 `SHOW MASTER STATUS`。

 *ssl\$1encryption*   
指定是否在复制连接中使用安全套接字层（SSL）加密的值。1 表示使用 SSL 加密，0 表示不使用加密。默认值为 0。  
不支持 `SOURCE_SSL_VERIFY_SERVER_CERT` 选项。此选项设置为 0，这意味着连接已加密，但未验证证书。

 *delay*   
延迟从源数据库实例复制的最小秒数。  
该参数的限制为一天（86400 秒）。

 *channel\$1name*   
复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_set_external_source_with_delay_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_set_external_source_with_delay_for_channel` 过程。此过程必须在您要创建复制通道的目标 RDS for MySQL 数据库实例上运行。

在运行 `mysql.rds_set_external_source_with_delay_for_channel` 之前，请为源数据库实例上的复制用户配置多源副本所需的权限。要将多源副本连接到源数据库实例，必须指定对源数据库实例拥有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限的复制用户的 `replication_user_name` 和 `replication_user_password` 值。

**在源数据库实例上配置复制用户**

1. 通过使用所选的 MySQL 客户端，连接到源数据库实例并创建要用于复制的用户账户。示例如下：
**重要**  
作为安全最佳实践，请指定除以下示例中所示占位符值以外的密码。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 在源数据库实例上，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。以下示例向您所在域的“repl\$1user”用户授予对所有数据库的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com';
   ```

要使用加密复制，请将源数据库实例配置为使用 SSL 连接。

在调用 `mysql.rds_set_external_source_with_delay_for_channel` 以配置此复制通道后，可以在副本上调用 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 以启动通道上的复制过程。您可以调用 [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) 以停止通道上的复制，并从副本中移除通道配置。

当您调用 `mysql.rds_set_external_source_with_delay_for_channel` 时，Amazon RDS 将时间、用户和 `set channel source` 的操作记录在 `mysql.rds_history` 表（不包括通道特定的详细信息）和 `mysql.rds_replication_status` 表中，并包含通道名称。此信息仅用于内部使用和监控目的。要记录完整的过程调用以进行审核，请考虑根据应用程序的特定要求启用审核日志或常规日志。

### 示例
<a name="mysql_rds_set_external_source_with_delay_for_channel-examples"></a>

在 RDS for MySQL 数据库实例上运行时，以下示例将此数据库实例上名为 `channel_1` 的复制通道配置为从由主机 `sourcedb.example.com` 和端口 `3306` 指定的源复制数据。它将最小复制延迟设置为一小时（3600 秒）。这意味着，来自源 RDS for MySQL 数据库实例的更改在至少一个小时内不会在多源副本上应用。

```
call mysql.rds_set_external_source_with_delay_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_source_auto_position_for_channel"></a>

将指定通道的复制模式设置为基于二进制日志文件位置或全局事务标识符（GTID）。

### 语法
<a name="mysql_rds_set_source_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_source_auto_position_for_channel (
auto_position_mode
 , channel_name
);
```

### 参数
<a name="mysql_rds_set_source_auto_position_for_channel-parameters"></a>

 *auto\$1position\$1mode*   
该值指示是使用日志文件位置复制还是基于 GTID 的复制：  
+ `0` – 使用基于二进制日志文件位置的复制方法。默认为 `0`。
+ `1` – 使用基于 GTID 的复制方法。

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_set_source_auto_position_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_set_source_auto_position_for_channel` 过程。此过程在指定的通道上重启复制，以应用指定的自动定位模式。

### 示例
<a name="mysql_rds_set_source_auto_position_for_channel-examples"></a>

以下示例将 channel\$11 的自动定位模式设置为使用基于 GTID 的复制方法。

```
call mysql.rds_set_source_auto_position_for_channel(1,'channel_1');
```

## mysql.rds\$1set\$1source\$1delay\$1for\$1channel
<a name="mysql_rds_set_source_delay_for_channel"></a>

为指定的通道设置延迟从源数据库实例复制到多源副本的最小秒数。

### 语法
<a name="mysql_rds_set_source_delay_for_channel-syntax"></a>

```
CALL mysql.rds_set_source_delay_for_channel(delay, channel_name);
```

### 参数
<a name="mysql_rds_set_source_delay_for_channel-parameters"></a>

 *delay*   
延迟从源数据库实例进行复制的最小秒数。  
该参数的限制为一天（86400 秒）。

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_set_source_delay_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_set_source_delay_for_channel` 过程。要使用此过程，请首先调用 `mysql.rds_stop_replication_for_channel` 以停止复制。然后，调用此过程来设置复制延迟值。设置延迟后，调用 `mysql.rds_start_replication_for_channel` 以重启复制。

### 示例
<a name="mysql_rds_set_source_delay_for_channel-examples"></a>

以下示例将从多源副本的 `channel_1` 上的源数据库实例进行复制的延迟设置为至少一小时（3600 秒）。

```
CALL mysql.rds_set_source_delay_for_channel(3600,'channel_1');
```

## mysql.rds\$1skip\$1repl\$1error\$1for\$1channel
<a name="mysql_rds_skip_repl_error_for_channel"></a>

跳过二进制日志事件并删除指定通道的 MySQL DB 多源副本上的复制错误。

### 语法
<a name="mysql_rds_skip_repl_error_for_channel-syntax"></a>

 

```
CALL mysql.rds_skip_repl_error_for_channel(channel_name);
```

### 参数
<a name="mysql_rds_skip_repl_error_for_channel-parameters"></a>

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_skip_repl_error_for_channel-usage-notes"></a>

主用户必须对只读副本运行 `mysql.rds_skip_repl_error_for_channel` 过程。使用此过程的方式与使用 `mysql.rds_skip_repl_error` 跳过只读副本上的错误的方式类似。有关更多信息，请参阅 [调用 mysql.rds\$1skip\$1repl\$1error 过程](Appendix.MySQL.CommonDBATasks.SkipError.md#Appendix.MySQL.CommonDBATasks.SkipError.procedure)。

**注意**  
要跳过基于 GTID 的复制中的错误，建议您改用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 过程。

要确定是否存在错误，请运行 MySQL `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G` 命令。如果复制错误不太严重，您可以运行 `mysql.rds_skip_repl_error_for_channel` 以跳过该错误。如果有多个错误，`mysql.rds_skip_repl_error_for_channel` 会删除指定复制通道上的第一个错误，然后警告存在其他错误。然后，您可以使用 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G` 确定要对下一个错误采取的适当操作。有关返回的值的信息，请参阅 MySQL 文档中的 [SHOW REPLICA STATUS 语法](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)。

## mysql.rds\$1start\$1replication\$1for\$1channel
<a name="mysql_rds_start_replication_for_channel"></a>

在指定的通道上发起从 RDS for MySQL 数据库实例到多源副本的复制。

**注意**  
您可以使用 [mysql.rds\$1start\$1replication\$1until\$1for\$1channel](#mysql_rds_start_replication_until_for_channel) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel](#mysql_rds_start_replication_until_gtid_for_channel) 存储过程从 RDS for MySQL 数据库实例中启动复制，并在指定的二进制日志文件位置停止复制。

### 语法
<a name="mysql_rds_start_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_for_channel(channel_name);
```

### 参数
<a name="mysql_rds_start_replication_for_channel-parameters"></a>

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_start_replication_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_start_replication_for_channel` 过程。从源 RDS for MySQL 数据库实例导入数据后，在多源副本上运行此命令以在指定的通道上开始复制。

### 示例
<a name="mysql_rds_start_replication_for_channel-examples"></a>

以下示例开始在多源副本的 `channel_1` 上进行复制。

```
CALL mysql.rds_start_replication_for_channel('channel_1');
```

## mysql.rds\$1start\$1replication\$1until\$1for\$1channel
<a name="mysql_rds_start_replication_until_for_channel"></a>

在指定的通道上从 RDS for MySQL 数据库实例启动复制，并在指定的二进制日志文件位置停止复制。

### 语法
<a name="mysql_rds_start_replication_until_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_for_channel (
replication_log_file
  , replication_stop_point
  , channel_name
);
```

### 参数
<a name="mysql_rds_start_replication_until_for_channel-parameters"></a>

 *replication\$1log\$1file*   
源数据库实例上包含复制信息的二进制日志的名称。

 *replication\$1stop\$1point *   
`replication_log_file` 二进制日志中复制将停止的位置。

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_start_replication_until_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_start_replication_until_for_channel` 过程。通过此过程，复制将启动，然后在达到指定的二进制日志文件位置时停止。此过程会同时停止 `SQL_THREAD` 和 `IO_THREAD`。

为 `replication_log_file` 参数指定的文件名必须与源数据库实例二进制日志文件名匹配。

当 `replication_stop_point` 参数指定过去的某个停止位置时，即会立即停止复制。

### 示例
<a name="mysql_rds_start_replication_until_for_channel-examples"></a>

以下示例在 `channel_1` 上启动复制并复制更改，直到它到达 `mysql-bin-changelog.000777` 二进制日志文件中的位置 `120`。

```
call mysql.rds_start_replication_until_for_channel(
  'mysql-bin-changelog.000777',
  120,
  'channel_1'
  );
```

## mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel
<a name="mysql_rds_start_replication_until_gtid_for_channel"></a>

在指定的通道上从 RDS for MySQL 数据库实例中启动复制，并在指定的全局事务标识符（GTID）处停止复制。

### 语法
<a name="mysql_rds_start_replication_until_gtid_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_gtid_for_channel(gtid,channel_name);
```

### 参数
<a name="mysql_rds_start_replication_until_gtid_for_channel-parameters"></a>

 *gtid*   
在其之后停止复制的 GTID。

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_start_replication_until_gtid_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_start_replication_until_gtid_for_channel` 过程。该过程在指定的通道上启动复制并应用所有更改，直至指定的 GTID 值。然后，它在该通道上停止复制。

在 `gtid` 参数指定副本已运行的事务时，将会立即停止复制。

在运行此过程之前，必须通过将 `replica_parallel_workers` 或 `slave_parallel_workers` 的值设置为 `0` 来禁用多线程复制。

### 示例
<a name="mysql_rds_start_replication_until_gtid_for_channel-examples"></a>

以下示例在 `channel_1` 上启动复制并复制更改，直至到达 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23`。

```
call mysql.rds_start_replication_until_gtid_for_channel('3E11FA47-71CA-11E1-9E33-C80AA9429562:23','channel_1');
```

## mysql.rds\$1stop\$1replication\$1for\$1channel
<a name="mysql_rds_stop_replication_for_channel"></a>

停止在指定的通道上从 MySQL 数据库实例进行复制。

### 语法
<a name="mysql_rds_stop_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_stop_replication_for_channel(channel_name);
```

### 参数
<a name="mysql_rds_stop_replication_for_channel-parameters"></a>

 *channel\$1name*   
多源副本上复制通道的名称。每个复制通道接收来自在特定主机和端口上运行的单个源 RDS for MySQL 数据库实例的二进制日志事件。

### 使用说明
<a name="mysql_rds_stop_replication_for_channel-usage-notes"></a>

主用户必须运行 `mysql.rds_stop_replication_for_channel` 过程。

### 示例
<a name="mysql_rds_stop_replication_for_channel-examples"></a>

以下示例停止在多源副本的 `channel_1` 上进行复制。

```
CALL mysql.rds_stop_replication_for_channel('channel_1');
```