

# 使用 Amazon Aurora MySQL 进行复制
<a name="AuroraMySQL.Replication"></a><a name="replication"></a>

 Aurora MySQL 复制特征是提高集群可用性与性能的关键所在。Aurora 可以帮助您轻松创建集群并调整大小（最多可创建 15 个 Aurora 副本）。

 所有副本采用相同的基础数据。如果某些数据库实例离线，其他处于可用状态的数据库实例将继续处理查询，或者在需要时作为写入器接管这些实例。Aurora 会自动将您的只读连接分配到多个数据库实例中，从而帮助 Aurora 集群更好地支持查询密集型工作负载。

在以下主题中，您可以了解 Aurora MySQL 复制的工作方式以及如何微调复制设置以获得最佳的可用性和性能。

**Topics**
+ [使用 Aurora 副本](#AuroraMySQL.Replication.Replicas)
+ [Amazon Aurora MySQL 的复制选项](#AuroraMySQL.Replication.Options)
+ [Amazon Aurora MySQL 复制的性能注意事项](#AuroraMySQL.Replication.Performance)
+ [Amazon Aurora MySQL 的零停机重启 (ZDR)](AuroraMySQL.Replication.Availability.md)
+ [使用 Aurora MySQL 配置复制筛选条件](AuroraMySQL.Replication.Filters.md)
+ [监控 Amazon Aurora MySQL 复制](#AuroraMySQL.Replication.Monitoring)
+ [跨 Amazon Web Services 区域复制 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Replication.CrossRegion.md)
+ [Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制（二进制日志复制）](AuroraMySQL.Replication.MySQL.md)
+ [使用基于 GTID 的复制](mysql-replication-gtid.md)

## 使用 Aurora 副本
<a name="AuroraMySQL.Replication.Replicas"></a>

 Aurora 副本是 Aurora 数据库集群中的独立终端节点，最适合用于扩展读取操作以及提高可用性。对于数据库集群在 Amazon Web Services 区域中所跨的多个可用区，最多可以分配 15 个 Aurora 副本。虽然数据库集群卷由数据库集群的多个数据副本组成，但集群卷中的数据表示为数据库集群中的主实例和 Aurora 副本的单个逻辑卷。有关 Aurora 副本的更多信息，请参阅 [Aurora 副本](Aurora.Replication.md#Aurora.Replication.Replicas)。

 Aurora 副本十分适用于读取扩展，因为它们完全专用于集群卷上的读取操作。写入操作由主实例进行管理。由于集群卷是在 Aurora MySQL 数据库集群中的所有实例之间共享的，因此，无需执行额外的操作以复制每个 Aurora 副本的数据副本。相比之下，MySQL 只读副本必须在单一线程上，重放从源数据库实例向其本地数据存储的所有写入操作。此限制会影响到 MySQL 只读副本支持海量读取流量的能力。

 对于 Aurora MySQL，在删除 Aurora 副本时，将立即删除其实例终端节点，并将 Aurora 副本从读取器终端节点中删除。如果在正待删除的 Aurora 副本上运行语句，则有 3 分钟宽限期。现有语句可在此宽限期内正常完成。当此宽限期结束后，将关闭并删除 Aurora 副本。

**重要**  
 对于在 InnoDB 表上执行的操作，Aurora MySQL 的 Aurora 副本始终使用 `REPEATABLE READ` 默认事务隔离级别。仅对于 Aurora MySQL 数据库集群的主实例，您可以使用 `SET TRANSACTION ISOLATION LEVEL` 命令更改事务级别。该限制避免在 Aurora 副本上出现用户级锁定，并允许 Aurora 副本扩展以支持数千个活动用户连接，同时仍保持最小的副本滞后时间。

**注意**  
 在主实例上运行的 DDL 语句可能会中断关联的 Aurora 副本上的数据库连接。如果 Aurora 副本连接主动使用数据库对象（如表），并且使用 DDL 语句在主实例上修改该对象，则会中断 Aurora 副本连接。

**注意**  
 中国 (宁夏) 区域不支持跨区域只读副本。

## Amazon Aurora MySQL 的复制选项
<a name="AuroraMySQL.Replication.Options"></a>

您可以在以下任意选项之间设置复制：
+ 不同 Amazon Web Services 区域中的两个 Aurora MySQL 数据库集群（通过创建 Aurora MySQL 数据库集群的跨区域只读副本）。

  有关更多信息，请参阅 [跨 Amazon Web Services 区域复制 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Replication.CrossRegion.md)。
+ 同一 Amazon Web Services 区域中的两个 Aurora MySQL 数据库集群 [通过使用 MySQL 二进制日志（binlog）复制]。

  有关更多信息，请参阅 [Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制（二进制日志复制）](AuroraMySQL.Replication.MySQL.md)。
+ 一个 RDS for MySQL 数据库实例（作为源）和一个 Aurora MySQL 数据库集群（通过创建 RDS for MySQL 数据库实例的 Aurora 只读副本）。

  您可以使用此方法在迁移到 Aurora 期间将现有和持续的数据更改纳入 Aurora MySQL 中。有关更多信息，请参阅 [使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Migrating.RDSMySQL.Replica.md)。

  您还可以使用此方法提高数据读取查询的可扩展性。您可以通过使用只读 Aurora MySQL 集群中的一个或多个数据库实例查询数据来执行此操作。有关更多信息，请参阅 [使用 Amazon Aurora 扩展 MySQL 数据库的读取](AuroraMySQL.Replication.ReadScaling.md)。
+ 一个 Amazon Web Services 区域中的一个 Aurora MySQL 数据库集群和不同区域中最多五个 Aurora 只读 Aurora MySQL 数据库集群（通过创建 Aurora 全局数据库）。

  您可以使用 Aurora 全部数据库来支持覆盖全球范围的应用程序。主 Aurora MySQL 数据库集群有一个写入器实例和最多 15 个 Aurora 副本。每一个只读辅助 Aurora MySQL 数据库集群最多可以由 16 个 Aurora 副本组成。有关更多信息，请参阅“[使用 Amazon Aurora Global Database](aurora-global-database.md)”。

**注意**  
重新引导 Amazon Aurora 数据库集群的主实例还会自动重新引导该数据库集群的 Aurora 副本，以便重新建立入口点来确保数据库集群中的读/写一致性。

## Amazon Aurora MySQL 复制的性能注意事项
<a name="AuroraMySQL.Replication.Performance"></a>

以下特征可以帮助您微调 Aurora MySQL 复制性能。

副本日志压缩特征自动降低复制消息的网络带宽。由于每条消息将传输到所有 Aurora 副本，因此，较大的集群的好处更大。该特征在写入方节点上产生一些 CPU 开销以执行压缩。在 Aurora MySQL 版本 2 和版本 3 中，始终启用它。

二进制日志筛选特征自动降低复制消息的网络带宽。由于 Aurora 副本不使用复制消息中包含的二进制日志信息，因此，将从发送到这些节点的消息中省略该数据。

在 Aurora MySQL 版本 2 中，您可以通过更改 `aurora_enable_repl_bin_log_filtering` 参数来控制此特征。默认情况下，该参数为 on。由于该优化应该是透明的，因此，您只能在诊断或故障排除期间禁用该设置以解决与复制相关的问题。例如，与无法使用该特征的旧 Aurora MySQL 集群的行为相符。

在 Aurora MySQL 版本 3 中，二进制日志筛选始终处于启用状态。

## 监控 Amazon Aurora MySQL 复制
<a name="AuroraMySQL.Replication.Monitoring"></a>

读取扩展和高可用性依赖于尽可能短的滞后时间。您可以通过监控 Amazon CloudWatch `AuroraReplicaLag` 指标来监控 Aurora 副本滞后于 Aurora MySQL 数据库集群主实例的时间。`AuroraReplicaLag` 指标记录在每个 Aurora 副本中。

主数据库实例还记录 `AuroraReplicaLagMaximum` 和 `AuroraReplicaLagMinimum` Amazon CloudWatch 指标。`AuroraReplicaLagMaximum` 指标记录主数据库实例与数据库集群中每个 Aurora 副本之间的最大滞后量。`AuroraReplicaLagMinimum` 指标记录主数据库实例与数据库集群中每个 Aurora 副本之间的最小滞后量。

如果您需要 Aurora 副本滞后的最新值，可在 Amazon CloudWatch 中检查 `AuroraReplicaLag` 指标。有关 Aurora MySQL 数据库集群的每个 Aurora 副本的 Aurora 副本滞后也会记录在 `information_schema.replica_host_status` 表中。有关此表的更多信息，请参阅 [information\$1schema.replica\$1host\$1status](AuroraMySQL.Reference.ISTables.md#AuroraMySQL.Reference.ISTables.replica_host_status)。

有关监控 RDS 实例和 CloudWatch 指标的更多信息，请参阅[监控 Amazon Aurora 集群中的指标](MonitoringAurora.md)。