

# 在 Amazon RDS 中使用 MariaDB 复制
<a name="USER_MariaDB.Replication"></a>

一般使用只读副本配置 Amazon RDS 数据库实例之间的复制。有关只读副本的一般信息，请参阅[使用数据库实例只读副本](USER_ReadRepl.md)。有关使用 Amazon RDS for MariaDB 上的只读副本的特定信息，请参阅[使用 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.md)。

还可以为 MariaDB 数据库实例配置基于二进制日志坐标的复制。对于 MariaDB 实例，您也可以配置基于复制的全局事务 ID (GTID)，它将提供更高的崩溃安全性。有关更多信息，请参阅 [配置与外部源实例之间的基于 GTID 的复制](MariaDB.Procedural.Replication.GTID.md)。

下面是可用于 RDS for MariaDB 的其他复制选项：
+ 您可以设置 RDS for MariaDB 数据库实例与 Amazon RDS 外部的 MySQL 或 MariaDB 实例之间的复制。有关配置外部源复制的信息，请参阅[配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.ReplMariaDB.md)。
+ 可以配置复制以导入来自 Amazon RDS 外部的 MySQL 或 MariaDB 实例的数据库，或将数据库导出至此类实例。有关更多信息，请参阅[将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)和[使用复制从 MySQL 数据库实例中导出数据](MySQL.Procedural.Exporting.NonRDSRepl.md)。

对于其中任何复制选项，您可以使用基于行的复制、基于语句的复制或混合复制。基于行的复制仅复制因 SQL 语句而导致更改的行。基于语句的复制将复制整个 SQL 语句。混合复制尽可能使用基于语句的复制，但当运行对于基于语句的复制不安全的 SQL 语句时切换到基于行的复制。在大多数情况下，建议使用混合复制。数据库实例的二进制日志格式确定复制是基于行、基于语句还是混合的。有关设置二进制日志格式的信息，请参阅[配置 MariaDB 二进制日志记录](USER_LogAccess.MariaDB.BinaryFormat.md)。

有关 MariaDB 版本之间的复制兼容性的信息，请参阅 MariaDB 文档中的 [Replication Compatibility](https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/#replication-compatibility)。

**Topics**
+ [使用 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.md)
+ [配置与外部源实例之间的基于 GTID 的复制](MariaDB.Procedural.Replication.GTID.md)
+ [配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.ReplMariaDB.md)

# 使用 MariaDB 只读副本
<a name="USER_MariaDB.Replication.ReadReplicas"></a>

接下来，您可以找到有关使用 Amazon RDS for MariaDB 上的只读副本的特定信息。有关只读副本及其使用说明的一般信息，请参阅[使用数据库实例只读副本](USER_ReadRepl.md)。
+ [使用 MariaDB 配置复制筛选条件](USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.md)
+ [使用 MariaDB 配置延迟复制](USER_MariaDB.Replication.ReadReplicas.DelayReplication.md)
+ [使用 MariaDB 更新只读副本](USER_MariaDB.Replication.ReadReplicas.Updates.md)
+ [使用 MariaDB 处理多可用区只读副本部署](USER_MariaDB.Replication.ReadReplicas.MultiAZ.md)
+ [将级联只读副本用于 RDS for MariaDB](USER_MariaDB.Replication.ReadReplicas.Cascading.md)
+ [监控 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.Monitor.md)
+ [开始和停止 MariaDB 只读副本复制](USER_MariaDB.Replication.ReadReplicas.StartStop.md)
+ [排查 MariaDB 只读副本问题](USER_ReadRepl.Troubleshooting.MariaDB.md)

## 使用 MariaDB 配置只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.Configuration"></a>

确保先通过将备份保留期设置为一个非零值来在源数据库实例上启用自动备份，然后 MariaDB 数据库实例才能充当复制源。此要求也适用于作为一个只读副本的源数据库实例的另一个只读副本。

您可以从同一区域内的一个数据库实例创建多达 15 个只读副本。为了高效地进行复制，每个只读副本具有的计算和存储资源的量应与源数据库实例的一样多。如果扩展源数据库实例，则还应扩展只读副本。

RDS for MariaDB 支持级联只读副本。要了解如何配置级联只读副本，请参阅 [将级联只读副本用于 RDS for MariaDB](USER_MariaDB.Replication.ReadReplicas.Cascading.md)。

您可以在引用相同源数据库实例的同时，运行多个只读副本创建和删除操作。当您执行这些操作时，应将每个源实例的只读副本数限制在 15 个以内。

# 使用 MariaDB 配置复制筛选条件
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters"></a>

您可以使用复制筛选条件来指定使用只读副本的数据库和表。复制筛选条件可以将数据库和表包含在复制之中或排除在复制之外。

以下是复制筛选条件的一些使用案例：
+ 缩减只读副本的大小。使用复制筛选，您可以排除只读副本上不需要的数据库和表。
+ 出于安全原因，将数据库和表从只读副本中排除。
+ 在不同只读副本中为特定使用案例复制不同的数据库和表。例如，您可以使用特定的只读副本进行分析或分片。
+ 对于在不同 AWS 区域中具有只读副本的数据库实例，要在不同的 AWS 区域中复制不同的数据库或表。

**注意**  
您还可以使用复制筛选条件来指定使用入站复制拓扑中主 MariaDB 数据库实例的数据库和表。有关此配置的更多信息，请参阅[配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.Repl.md)。

**Topics**
+ [设置 RDS for MariaDB 的复制筛选参数](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Configuring)
+ [RDS for MariaDB 的复制筛选限制](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Limitations)
+ [RDS for MariaDB 的复制筛选示例](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Examples)
+ [查看只读副本的复制筛选条件](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Viewing)

## 设置 RDS for MariaDB 的复制筛选参数
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Configuring"></a>

要配置复制筛选条件，请在只读副本上设置以下复制筛选参数：
+ `replicate-do-db` –将更改复制到指定的数据库。为只读副本设置此参数时，仅复制参数中指定的数据库。
+ `replicate-ignore-db` –不将更改复制到指定的数据库。为只读副本设置 `replicate-do-db` 参数时，不会评估此参数。
+ `replicate-do-table` –将更改复制到指定的表。为只读副本设置此参数时，仅复制参数中指定的表。此外，如果设置了 `replicate-do-db` 或 `replicate-ignore-db` 参数，则包含指定表的数据库必须包含在使用只读副本的复制中。
+ `replicate-ignore-table` –不将更改复制到指定的表。为只读副本设置 `replicate-do-table` 参数时，不会评估此参数。
+ `replicate-wild-do-table` – 根据指定的数据库和表名模式复制表。支持 `%` 和 `_` 通配符。设置 `replicate-do-db` 或 `replicate-ignore-db` 参数时，请确保包含指定表的数据库包含在使用只读副本的复制中。
+ `replicate-wild-ignore-table` –不基于指定的数据库和表名模式复制表。支持 `%` 和 `_` 通配符。为只读副本设置 `replicate-do-table` 或 `replicate-wild-do-table` 参数时，不会评估此参数。

将按这些参数列出的顺序对其进行评估。有关这些参数如何运行的更多信息，请参阅 [MariaDB 文档 ](https://mariadb.com/kb/en/replication-filters/#replication-filters-for-replication-slaves)。

默认情况下，这些参数中的每个参数都具有一个空值。在每个只读副本上，您可以使用这些参数来设置、更改和删除复制筛选条件。设置其中一个参数时，请用逗号将各筛选条件分开。

您可以在 `%` 和 `_` 参数中使用 `replicate-wild-do-table` 和 `replicate-wild-ignore-table` 通配符。`%` 通配符可以匹配任意数量的字符，而 `_` 通配符只能匹配一个字符。

源数据库实例的二进制日志记录格式对于复制非常重要，因为它决定了数据更改的记录。`binlog_format` 参数的设置将决定复制是基于行还是基于语句的复制。有关更多信息，请参阅“[配置 MariaDB 二进制日志记录](USER_LogAccess.MariaDB.BinaryFormat.md)”。

**注意**  
无论源数据库实例上的 `binlog_format` 设置如何，所有数据定义语言 (DDL) 语句都将作为语句进行复制。

## RDS for MariaDB 的复制筛选限制
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Limitations"></a>

以下限制适用于对 RDS for MariaDB 进行复制筛选：
+ 每个复制筛选参数不得超过 2000 个字符。
+ 复制筛选条件中不支持逗号。
+ 不支持用于二进制日志筛选的 MariaDB `binlog_do_db` 和 `binlog_ignore_db` 选项。
+ 复制筛选不支持 XA 事务。

  有关更多信息，请参阅 MySQL 文档中的[XA 事务限制](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)。
+ RDS for MariaDB 版本 10.2 不支持复制筛选。

## RDS for MariaDB 的复制筛选示例
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Examples"></a>

要为只读副本配置复制筛选，请修改与只读副本关联的参数组中的复制筛选参数。

**注意**  
您无法修改默认参数组。如果只读副本使用默认参数组，请创建新的参数组并将其与只读副本关联。有关数据库参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 在参数组中设置参数。有关设置参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。在参数组中设置参数时，与参数组关联的所有数据库实例都使用参数设置。如果在参数组中设置复制筛选参数，请确保参数组仅与只读副本关联。将源数据库实例的复制筛选参数留空。

以下示例使用 AWS CLI 设置参数。这些示例将 `ApplyMethod` 设置为 `immediate`，以便在 CLI 命令完成后立即发生参数更改。如果希望在只读副本重新启动后应用待处理的更改，请将 `ApplyMethod` 设置为 `pending-reboot`。

以下示例设置了复制筛选条件：
+ [Including databases in replication](#rep-filter-in-dbs-mariadb)
+ [Including tables in replication](#rep-filter-in-tables-mariadb)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mariadb)
+ [Escaping wildcard characters in names](#rep-filter-escape-wildcards-mariadb)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mariadb)
+ [Excluding tables from replication](#rep-filter-ex-tables-mariadb)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mariadb)<a name="rep-filter-in-dbs-mariadb"></a>

**Example 将数据库包含在复制之中**  
以下示例将 `mydb1` 和 `mydb2` 数据库包含在复制之内。为只读副本 `replicate-do-db` 设置时，仅复制参数中指定的数据库。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-in-tables-mariadb"></a>

**Example 将表包含在复制之中**  
以下示例将数据库 `table1` 中的 `table2` 和 `mydb1` 表包含在复制之中。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-in-tables-wildcards-mariadb"></a>

**Example 使用通配符将表包含在复制之中**  
以下示例将数据库 `orders` 中名称以 `returns` 和 `mydb` 开头的表包含在复制之中。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-escape-wildcards-mariadb"></a>

**Example 转义名称中的通配符**  
以下示例展示了如何使用转义字符 `\` 来转义名称中的通配符。  
假设数据库 `mydb1` 中有多个以 `my_table` 开头的表名，而且您希望将这些表包含在复制之中。表名包括下划线（下划线也是通配符），因此该示例将表名中的下划线转义。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-dbs-mariadb"></a>

**Example 将数据库排除在复制之外**  
以下示例将 `mydb1` 和 `mydb2` 数据库排除在复制之外。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-mariadb"></a>

**Example 将表排除在复制之外**  
以下示例将数据库 `table1` 中的表 `table2` 和 `mydb1`排除在复制之外。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-wildcards-mariadb"></a>

**Example 使用通配符将表排除在复制之外**  
以下示例将数据库 `orders` 中名称以 `returns` 和 `mydb` 开头的表排除在复制之外。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```

## 查看只读副本的复制筛选条件
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Viewing"></a>

您可以通过以下方式查看只读副本的复制筛选条件：
+ 检查与只读副本关联的参数组中复制筛选参数的设置。

  有关说明，请参阅[在 Amazon RDS 中查看数据库参数组的参数值](USER_WorkingWithParamGroups.Viewing.md)。
+ 在 MariaDB 客户端中，连接到只读副本并运行 `SHOW REPLICA STATUS` 语句。

  在输出中，以下字段显示了只读副本的复制筛选条件：
  + `Replicate_Do_DB`
  + `Replicate_Ignore_DB`
  + `Replicate_Do_Table`
  + `Replicate_Ignore_Table`
  + `Replicate_Wild_Do_Table`
  + `Replicate_Wild_Ignore_Table`

  有关这些字段的更多信息，请参阅 MySQL 文档中的[检查复制状态](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html)。
**注意**  
以前的 MariaDB 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 版本低于 10.5，那么请使用 `SHOW SLAVE STATUS`。

# 使用 MariaDB 配置延迟复制
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication"></a>

可以使用延迟复制作为灾难恢复策略。使用延迟复制，可指定最短的时间（以秒为单位）以延迟从源到只读副本的复制。如果出现灾难（如意外删除了表），可完成以下步骤以快速从灾难恢复：
+ 在导致灾难的更改发送到它之前停止复制到只读副本。

  要停止复制，请使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程。
+ 按照[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)中的说明，将只读副本提升为新的源数据库实例。

**注意**  
MariaDB 10.6 及更高版本支持延迟复制。
使用存储过程配置延迟复制。无法使用AWS 管理控制台、AWS CLI 或 Amazon RDS API 配置延迟复制。
您可以在延迟复制配置中使用基于全局事务标识符 (GTID) 的复制。

**Topics**
+ [在创建只读副本时配置延迟复制](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.ReplicaCreation)
+ [修改现有只读副本的延迟复制](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica)
+ [提升只读副本](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.Promote)

## 在创建只读副本时配置延迟复制
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.ReplicaCreation"></a>

要为未来通过数据库实例创建的任何只读副本配置延迟复制，请使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 参数运行 `target delay` 存储过程。

**在创建只读副本时配置延迟复制**

1. 通过使用 MariaDB 客户端，以主用户身份连接到作为只读副本源的 MariaDB 数据库实例。

1. 使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 参数运行 `target delay` 存储过程。

   例如，运行以下存储过程，针对从当前数据库实例创建的任何只读副本，指定将复制延迟至少一小时（3600 秒）。

   ```
   call mysql.rds_set_configuration('target delay', 3600);
   ```
**注意**  
运行此存储过程之后，将为使用 AWS CLI 或 Amazon RDS API 创建的任何只读副本配置延迟指定秒数的复制。

## 修改现有只读副本的延迟复制
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

要修改现有只读副本的延迟复制，请运行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 存储过程。

**修改现有只读副本的延迟复制**

1. 使用 MariaDB 客户端，以主用户的身份连接到只读副本。

1. 使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程停止复制。

1. 运行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 存储过程。

   例如，运行以下存储过程，指定复制到只读副本延迟至少一小时（3600 秒）。

   ```
   call mysql.rds_set_source_delay(3600);
   ```

1. 使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 存储过程开始复制。

## 提升只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.Promote"></a>

在灾难恢复方案中，当复制停止后，您可以将只读副本提升为新的源数据库实例。有关提升只读副本的信息，请参阅 [将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。

# 使用 MariaDB 更新只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.Updates"></a>

只读副本旨在支持读取查询，但您可能需要偶尔进行更新。例如，您可能需要添加索引，以加快访问副本的特定类型的查询。您可通过在只读副本的数据库参数组中将 `read_only` 参数设置为 **0** 来启用更新。

# 使用 MariaDB 处理多可用区只读副本部署
<a name="USER_MariaDB.Replication.ReadReplicas.MultiAZ"></a>

您可从单可用区或多可用区数据库实例部署中创建只读副本。您可以使用多可用区部署提高关键数据的持久性和可用性，但无法使用多可用区为只读查询提供辅助服务。您可以改为从大流量、多可用区数据库实例创建只读副本以分载只读查询。如果多可用区部署的源实例故障转移到辅助可用区，则任何关联的只读副本都将自动切换为使用辅助可用区（现在为主可用区）作为其复制源。有关更多信息，请参阅“[配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)”。

您可以将只读副本创建为多可用区数据库实例。Amazon RDS 会在另一个可用区中创建您的副本的备用，用于支持副本的故障转移。创建您的只读副本作为多可用区数据库实例与源数据库是否为多可用区数据库实例无关。

# 将级联只读副本用于 RDS for MariaDB
<a name="USER_MariaDB.Replication.ReadReplicas.Cascading"></a>

RDS for MariaDB 支持级联只读副本。使用*级联只读副本*，您可以扩展读取操作，而不会增加源 RDS for MariaDB 数据库实例的开销。

使用级联只读副本，您的 RDS for MariaDB 数据库实例会将数据发送到链中的第一个只读副本。然后，该只读副本将数据发送到链中的第二个副本，依此类推。最终结果是，链中的所有只读副本都具有来自 RDS for MariaDB 数据库实例的更改，但不会只在源数据库实例上产生开销。

您可以从源 RDS for MariaDB 数据库实例在链中创建一系列最多三个只读副本。例如，假设您具有 RDS for MariaDB 数据库实例 `mariadb-main`。您可执行以下操作：
+ 从 `mariadb-main` 开始，创建链中的第一个只读副本 `read-replica-1`。
+ 接下来，从 `read-replica-1`，创建链中的下一个只读副本 `read-replica-2`。
+ 最后，从 `read-replica-2`，创建链中的第三个只读副本 `read-replica-3`。

除了 `mariadb-main` 系列中的第三个级联只读副本之外，您无法创建另一个只读副本。从 RDS for MariaDB 源数据库实例到一系列级联只读副本末尾的完整实例系列最多可以包含四个数据库实例。

为了使级联只读副本正常工作，每个源 RDS For MariaDB 数据库实例必须启用自动备份。要对只读副本开启自动备份，请先创建只读副本，然后修改只读副本以开启自动备份。有关更多信息，请参阅 [创建只读副本](USER_ReadRepl.Create.md)。

与任何只读副本一样，您可以升级属于级联一部分的只读副本。从只读副本链中升级只读副本将从链中移除该副本。例如，假设您希望将一些工作负载从 `mariadb-main` 数据库实例转移到新实例，以仅供会计部门使用。假设该示例中的链有三个只读副本，您决定升级 `read-replica-2`。该链受到如下影响：
+ 升级 `read-replica-2` 会将其从复制链中移除。
  + 现在它是一个完全读/写数据库实例。
  + 它继续复制到 `read-replica-3`，就像在升级之前那样。
+ 您的 `mariadb-main` 继续复制到 `read-replica-1`。

有关升级只读副本的更多信息，请参阅[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。

# 监控 MariaDB 只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.Monitor"></a>

对于 MariaDB 只读副本，您可以通过在 Amazon CloudWatch 中查看 Amazon RDS `ReplicaLag` 指标来监控复制滞后。`ReplicaLag` 指标报告 `Seconds_Behind_Master` 命令的 `SHOW REPLICA STATUS` 字段的值。

**注意**  
以前的 MariaDB 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 版本低于 10.5，那么请使用 `SHOW SLAVE STATUS`。

MariaDB 复制滞后的常见原因如下所示：
+ 网络中断。
+ 向只读副本上带索引的表写入。如果只读副本上的 `read_only` 参数未设置为 0，它可以中断复制。
+ 使用 MyISAM 等非事务性存储引擎。仅 MariaDB 上的 InnoDB 存储引擎支持复制。

当 `ReplicaLag` 指标达到 0 时，即表示副本已赶上源数据库实例进度。如果 `ReplicaLag` 指标返回 -1，则当前未激活复制。`ReplicaLag` = -1 等效于 `Seconds_Behind_Master` = `NULL`。

# 开始和停止 MariaDB 只读副本复制
<a name="USER_MariaDB.Replication.ReadReplicas.StartStop"></a>

可通过调用系统存储过程 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)，在 Amazon RDS 数据库实例上停止再重新开始复制过程。对于长时间运行的操作 (如创建大型索引)，在两个 Amazon RDS 实例之间进行复制时可以这样做。在导入或导出数据库时，也需要停止再开始复制。有关更多信息，请参阅[将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)和[使用复制从 MySQL 数据库实例中导出数据](MySQL.Procedural.Exporting.NonRDSRepl.md)。

如果复制连续 30 天停止，不论是手动还是由于复制错误，Amazon RDS 将结束源数据库实例与所有只读副本之间的复制。这样做是为了防止源数据库实例上的存储需求增长以及长故障转移时间。只读副本数据库实例仍可用。但是无法恢复复制，因为在结束复制后，已从源数据库实例中删除只读副本所需的二进制日志。您可为源数据库实例创建新的只读副本来重新建立复制。

# 排查 MariaDB 只读副本问题
<a name="USER_ReadRepl.Troubleshooting.MariaDB"></a>

MariaDB 的复制技术是异步的。由于它们是异步的，因此，源数据库实例上偶发的 `BinLogDiskUsage` 会增多，而只读副本上应有 `ReplicaLag`。例如，对源数据库实例的大量写入操作可以并行进行。与之对比的是，对只读副本的写入操作使用单个 I/O 线程串行进行，这会导致源实例与只读副本之间存在滞后。有关 MariaDB 文档中只读副本的更多信息，请转到[复制概述](http://mariadb.com/kb/en/mariadb/replication-overview/)。

您可通过多种方式来减少对源数据库实例的更新与对只读副本的后续更新之间的滞后，例如：
+ 将只读副本的存储大小和数据库实例类调整到与源数据库实例类似。
+ 确保源数据库实例和只读副本使用的数据库参数组中的参数设置相兼容。有关更多信息和示例，请参阅本部分后面的有关 `max_allowed_packet` 参数的讨论。

Amazon RDS 监控只读副本的复制状态，如果由于任何原因停止复制，则将只读副本实例的 `Replication State` 字段更新为 `Error`。可能会有这样的例子，在您的只读副本上运行的 DML 查询与对源数据库实例的更新冲突。

可通过查看 `Replication Error` 字段来检查 MariaDB 引擎引发的关联错误的详细信息。还生成指示只读副本状态的事件，包括 [RDS-EVENT-0045](USER_Events.Messages.md#RDS-EVENT-0045)、[RDS-EVENT-0046](USER_Events.Messages.md#RDS-EVENT-0046) 和 [RDS-EVENT-0047](USER_Events.Messages.md#RDS-EVENT-0047)。有关这些事件和事件订阅的详细信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。如果返回 MariaDB 错误消息，则检查 [MariaDB 错误消息文档](http://mariadb.com/kb/en/mariadb/mariadb-error-codes/)中的错误。

一个可导致复制出错的常见问题是只读副本的 `max_allowed_packet` 参数的值小于源数据库实例的 `max_allowed_packet` 参数的值。`max_allowed_packet` 参数是可在数据库参数组中进行设置的自定义参数，用于指定可在数据库上运行的最大 DML 代码大小。有时候，与源数据库实例关联的数据库参数组中的 `max_allowed_packet` 参数值，要小于与源的只读副本关联的数据库参数组中的 `max_allowed_packet` 参数值。在这些情况下，复制过程可能会引发错误 (数据包大于 'max\$1allowed\$1packet' 字节) 并停止复制。通过将源和只读副本设置为使用具有相同 `max_allowed_packet` 参数值的数据库参数组，即可更正此错误。

其他可导致复制错误的常见情况包括：
+ 对只读副本上的表进行写入操作。如果是在只读副本上创建索引，则需要将 `read_only` 参数设置为 **0** 才能创建索引。如果对只读副本上的表进行写入操作，则可能会中断复制。
+ 使用非事务性存储引擎，如 MyISAM。只读副本需要使用事务性存储引擎。仅 MariaDB 上的 InnoDB 存储引擎支持复制。
+ 使用不安全的不确定性查询，如 `SYSDATE()`。有关更多信息，请参阅[确定二进制日志记录中的安全和不安全语句](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)。

如果您确定可安全跳过错误，那么可以按照[跳过 RDS for MySQL 的当前复制错误](Appendix.MySQL.CommonDBATasks.SkipError.md)中描述的步骤操作。否则，可删除只读副本，然后使用相同的数据库实例标识符创建实例，以使终端节点保持与旧只读副本的终端节点相同。如果复制错误得到纠正，则 `Replication State` 将更改为 *replicating*。

对于 MariaDB 数据库实例，在某些情况下，如果某些二进制日志 (binlog) 事件在故障期间未刷新，则只读副本将无法切换到辅助可用区。在这些情况下，请手动删除并重新创建只读副本。您可通过设置以下参数值来降低发生这种情况的可能性：`sync_binlog=1` 和 `innodb_flush_log_at_trx_commit=1`。这些设置可能降低性能，因此，请先测试其影响，然后在生产环境中实施更改。

# 配置与外部源实例之间的基于 GTID 的复制
<a name="MariaDB.Procedural.Replication.GTID"></a>

您可以将基于全局事务标识符 (GTID) 的复制从版本 10.0.24 或更高版本的外部 MariaDB 实例设置到 RDS for MariaDB 数据库实例中。对 Amazon RDS 设置外部源实例和副本时，请遵循以下准则：
+ 监控作为副本的 RDS for MariaDB 数据库实例的故障转移事件。如果发生失效转移，则可能会在具有不同的网络地址的新主机上重新创建作为副本的数据库实例。有关如何监控故障转移事件的信息，请参阅[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 在源实例上保留二进制日志 (binlog)，直到您确认将其应用于副本。这种维护将确保您可以在发生故障时还原源实例。
+ 在 Amazon RDS 上对 MariaDB 数据库实例启用自动备份。通过启用自动备份，可以确保在需要重新同步源实例和副本时能够将副本还原到特定时间点。有关备份和时间点还原的信息，请参阅[备份、还原和导出数据](CHAP_CommonTasks.BackupRestore.md)。

**注意**  
对 MariaDB 数据库实例启动复制功能所需的权限受到限制，且对 Amazon RDS 主用户不可用。因此，您必须使用 Amazon RDS [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令来设置活动数据库和 RDS for MariaDB 数据库之间的复制。

要启动外部源实例和 Amazon RDS 上的 MariaDB 数据库实例之间的复制，请使用以下步骤。<a name="MariaDB.Procedural.Importing.External.Repl.Procedure"></a>

**启动复制**

1. 将源 MariaDB 实例设为只读：

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 获取外部 MariaDB 实例的当前 GTID。您可以通过使用 `mysql` 或您选择的查询编辑器运行 `SELECT @@gtid_current_pos;` 来执行该操作。

   GTID 采用 `<domain-id>-<server-id>-<sequence-id>` 格式。典型的 GTID 将类似于 **0-1234510749-1728**。有关 GTID 及其组成部分的更多信息，请参阅 MariaDB 文档中的[全局事务 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)。

1. 使用 `mysqldump` 将数据库从外部 MariaDB 实例复制到 MariaDB 数据库实例。对于非常大的数据库，您可能需要使用[将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)中的过程。

   对于 Linux、macOS 或 Unix：

   ```
   mysqldump \
       --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   对于：Windows

   ```
   mysqldump ^
       --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**注意**  
确保 `-p` 选项和输入的密码之间没有空格。  
作为安全最佳实践，请指定除此处所示提示以外的密码。

   在 `--host` 命令中使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 选项可指定用于连接到 MariaDB 数据库实例的主机名、用户名、端口和密码。主机名是 MariaDB 数据库实例终端节点中的 DNS 名称，例如，`myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 管理控制台上的实例详细信息中找到终端节点值。

1. 再次将源 MariaDB 实例设为可写。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

1. 在 Amazon RDS 管理控制台中，将承载外部 MariaDB 数据库的服务器的 IP 地址添加到 MariaDB 数据库实例的 VPC 安全组。有关修改 VPC 安全组的更多信息，请转到 *Amazon Virtual Private Cloud 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   在满足以下条件时，IP 地址可能会发生更改：
   + 您正在使用公有 IP 地址在外部源实例和数据库实例之间进行通信。
   + 外部源实例已停止并重新启动。

   如果满足这些条件，请在添加 IP 地址之前先对其进行验证。

   您可能还需要配置本地网络，允许来自 MariaDB 数据库实例 IP 地址的连接，使它能与外部 MariaDB 实例进行通信。要查找 MariaDB 数据库实例的 IP 地址，请使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主机名是 MariaDB 数据库实例终端节点中的 DNS 名称。

1. 通过使用所选的客户端，连接到外部 MariaDB 实例并创建将用于复制的 MariaDB 用户。此账户仅用于复制，并且必须仅供您的域使用以增强安全性。示例如下：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 对于外部 MariaDB 实例，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。例如，要为您的域的“`REPLICATION CLIENT`”用户授予对所有数据库的 `REPLICATION SLAVE` 和 `repl_user` 权限，请发出以下命令。

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

1. 将 MariaDB 数据库实例设置为副本。通过使用 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 命令，以主用户身份连接到 MariaDB 数据库实例，并将外部 MariaDB 数据库标识为复制源实例。使用您在步骤 2 中确定的 GTID。示例如下：

   ```
   CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 1);
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 在 MariaDB 数据库实例上，发出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令以启动复制：

   ```
   CALL mysql.rds_start_replication; 
   ```

# 配置与外部源实例之间的二进制日志文件位置复制
<a name="MySQL.Procedural.Importing.External.ReplMariaDB"></a>

您可以使用二进制日志文件复制来设置 RDS for MySQL 或 MariaDB 数据库实例与 Amazon RDS 外部的 MySQL 或 MariaDB 实例之间的复制。

**Topics**
+ [开始前的准备工作](#MySQL.Procedural.Importing.External.Repl.BeforeYouBegin)
+ [配置与外部源实例之间的二进制日志文件位置复制](#MySQL.Procedural.Importing.External.Repl.Procedure)

## 开始前的准备工作
<a name="MySQL.Procedural.Importing.External.Repl.BeforeYouBegin"></a>

您可以使用复制的事务的二进制日志文件位置配置复制。

对 Amazon RDS 数据库实例启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。因此，请确保使用 Amazon RDS [mysql.rds\$1set\$1external\$1master（RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 或 [mysql.rds\$1set\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 以及 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令来设置活动数据库和 Amazon RDS 数据库之间的复制。

要为 MySQL 或 MariaDB 数据库设置二进制日志记录格式，请更新 `binlog_format` 参数。如果您的数据库实例使用默认数据库实例参数组，请创建一个新的数据库参数组来修改 `binlog_format` 参数。在 MariaDB 和 MySQL 8.0 及更低版本中，`binlog_format` 默认设置为 `MIXED`。不过，如果您需要特定的二进制日志 (binlog) 格式，也可以将 `binlog_format` 设置为 `ROW` 或 `STATEMENT`。重启您的数据库实例以使更改生效。在 MySQL 8.4 及更高版本中，`binlog_format` 默认设置为 `ROW`。

有关设置 `binlog_format` 参数的信息，请参阅[为单可用区数据库配置 RDS for MySQL 二进制日志记录](USER_LogAccess.MySQL.BinaryFormat.md)。有关不同 MySQL 复制类型的含义的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)。

## 配置与外部源实例之间的二进制日志文件位置复制
<a name="MySQL.Procedural.Importing.External.Repl.Procedure"></a>

对 Amazon RDS 设置外部源实例和副本时，请遵循以下准则：
+ 监控作为副本的 Amazon RDS 数据库实例的失效转移事件。如果发生失效转移，则可能会在具有不同的网络地址的新主机上重新创建作为副本的数据库实例。有关如何监控失效转移事件的信息，请参阅[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 在您的源实例上维护二进制日志，直至您确认其已应用于副本。该维护确保在发生故障时可以还原源实例。
+ 对 Amazon RDS 数据库实例启用自动备份。通过启用自动备份，可以确保在需要重新同步源实例和副本时能够将副本还原到特定时间点。有关备份和时间点还原的信息，请参阅[备份、还原和导出数据](CHAP_CommonTasks.BackupRestore.md)。

**配置与外部源实例之间的二进制日志文件复制**

1. 将源 MySQL 或 MariaDB 实例设置为只读。

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 对源 MySQL 或 MariaDB 实例运行 `SHOW MASTER STATUS` 命令以确定二进制日志位置。

   您将收到类似于以下示例的输出。

   ```
   File                        Position  
   ------------------------------------
    mysql-bin-changelog.000031      107   
   ------------------------------------
   ```

1. 使用 `mysqldump` 将数据库从外部实例复制到 Amazon RDS 数据库实例。对于非常大的数据库，您可能需要使用[将数据导入 Amazon RDS for MySQL 数据库实例并减少停机时间](mysql-importing-data-reduced-downtime.md)中的过程。

   对于 Linux、macOS 或 Unix：

   ```
   mysqldump --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   对于：Windows

   ```
   mysqldump --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary ^
       -u local_user ^
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**注意**  
确保 `-p` 选项和输入的密码之间没有空格。

   要指定主机名、用户名、端口和密码以连接到 Amazon RDS 数据库实例，请在 `--host` 命令中使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 选项。主机名是 Amazon RDS 数据库实例端点中的域名服务 (DNS) 名称，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 AWS 管理控制台上的实例详细信息中找到端点值。

1. 再次将源 MySQL 或 MariaDB 实例设置为可写。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

   有关生成备份以用于复制的更多信息，请参阅 [MySQL 文档](https://dev.mysql.com/doc/refman/8.0/en/replication-solutions-backups-read-only.html)。

1. 在 AWS 管理控制台 中，将托管外部数据库的服务器的 IP 地址添加到 Amazon RDS 数据库实例的 Virtual Private Cloud (VPC) 安全组中。有关修改 VPC 安全组的更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   在满足以下条件时，IP 地址可能会发生更改：
   + 您正在使用公有 IP 地址在外部源实例和数据库实例之间进行通信。
   + 外部源实例已停止并重新启动。

   如果满足这些条件，请在添加 IP 地址之前先对其进行验证。

   您可能还需要配置本地网络，以允许来自 Amazon RDS 数据库实例的 IP 地址的连接。通过执行此操作，您的本地网络可以与外部 MySQL 或 MariaDB 实例进行通信。要查找 Amazon RDS 数据库实例的 IP 地址，请使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主机名是 Amazon RDS 数据库实例端点中的 DNS 名称。

1. 通过使用所选的客户端，连接到外部实例并创建要用于复制的用户。请仅将该账户用于复制，并将其限制为您的域以提高安全性。示例如下：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 对于外部 实例，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。例如，要为您的域的“`REPLICATION CLIENT`”用户授予对所有数据库的 `REPLICATION SLAVE` 和 `repl_user` 权限，请发出以下命令。

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

1. 将 Amazon RDS 数据库实例设置为副本。为此，请先以主用户身份连接到 Amazon RDS 数据库实例。然后使用 [mysql.rds\$1set\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 或 [mysql.rds\$1set\$1external\$1master（RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 命令，将外部 MySQL 或 MariaDB 数据库标识为源实例。使用在步骤 2 中确定的主日志文件名和主日志位置。下面是一些命令示例。

   **MySQL 8.4**

   ```
   CALL mysql.rds_set_external_source ('mysourceserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MariaDB 以及 MySQL 8.0 和 5.7**

   ```
   CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
在 RDS for MySQL 上，可以选择通过运行 [mysql.rds\$1set\$1external\$1source\$1with\$1delay（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_with_delay) 或 [mysql.rds\$1set\$1external\$1master\$1with\$1delay（RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master_with_delay) 存储过程来使用延迟复制。在 RDS for MySQL 中，使用延迟复制的一个原因是，使用 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 存储过程打开灾难恢复。目前，RDS for MariaDB 支持延迟复制，但不支持 `mysql.rds_start_replication_until` 过程。

1. 在 Amazon RDS 数据库实例上，发出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令以启动复制。

   ```
   CALL mysql.rds_start_replication;
   ```