

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

Aurora 有几个复制选项。每个 Aurora 数据库集群在同一集群中的多个数据库实例之间都有内置复制。您还可以在设置复制时将 Aurora 集群作为源或目标集群。将数据复制到或从 Aurora 集群中复制数据时，您可以选择内置功能，例如 Aurora Global Database，也可以选择用于 MySQL 或 PostgreSQL 数据库引擎的传统复制机制。您可以根据自己的需要选择适当的选项，以获得高可用性、便利性和性能的正确组合。以下部分说明选择每种方法的方式和时间。

**Topics**
+ [Aurora 副本](#Aurora.Replication.Replicas)
+ [使用 Aurora MySQL 进行复制](#Aurora.Replication.AuroraMySQL)
+ [使用 Aurora PostgreSQL 进行复制](#Aurora.Replication.AuroraPostgreSQL)

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

在 Aurora 预置数据库集群中创建第二个、第三个以及更多数据库实例时，Aurora 自动设置从写入器数据库实例到所有其他数据库实例的复制。这些其他数据库实例是只读实例，称为 Aurora 副本。讨论如何在集群中组合写入器和读取器数据库实例时，我们还将其称为读取器实例。

Aurora 副本有两个主要用途。您可以向他们发出查询以扩展应用程序的读取操作。为此，您通常需要连接到集群的读取器端点。这样，Aurora 可以将只读连接的负载分散到集群中尽可能多的 Aurora 副本之间。Aurora 副本还有助于提高可用性。如果集群中的写入器实例变为不可用，则 Aurora 会自动提升其中一个读取器实例以取代它作为新的写入器。

每个 Aurora 数据库集群最多可以包含 15 个 Aurora 副本。Aurora 副本可以分配到数据库集群在AWS区域中所跨的多个可用区。

数据库集群中的数据有自己的高可用性和可靠性功能，与集群中的数据库实例无关。如果您不熟悉 Aurora 存储功能，请参阅 [Amazon Aurora 存储概述](Aurora.Overview.StorageReliability.md#Aurora.Overview.Storage)。数据库集群卷实际上由该数据库集群的多个数据副本组成。数据库集群中的主实例和 Aurora 副本都将集群卷中的数据作为单个逻辑卷查看。

因此，所有 Aurora 副本均返回相同的查询结果数据，且副本滞后时间非常短。此滞后通常远远少于主实例写入更新后的 100 毫秒。副本滞后因数据库更改速率而异。也就是说，在对数据库执行大量写入操作期间，您可能发现副本滞后时间变长。

**注意**  
在以下 Aurora PostgreSQL 版本中，当 Aurora Replica 与写入器数据库实例失去通信超过 60 秒时，它会自动重启：  
14.6 及更低版本
13.9 及更低版本
12.13 及更低版本
所有 Aurora PostgreSQL 11 版本
有了读取可用性功能后，Aurora 副本不会自动重启。有关读取可用性功能及其适用版本的更多信息，请参阅[提高 Aurora 副本的读取可用性](AuroraPostgreSQL.Replication.md#AuroraPostgreSQL.Replication.Replicas.SRO)。

Aurora 副本十分适用于读取扩展，因为它们完全专用于集群卷上的读取操作。写入操作由主实例进行管理。由于集群卷是在数据库集群中的所有数据库实例间共享的，因此无需其他操作即可复制每个 Aurora 副本的数据副本。

要提高可用性，可以使用 Aurora 副本作为失效转移目标。也就是说，如果主实例失败，Aurora 副本将提升为主实例。提升过程只造成短暂的中断，在此期间，对主实例发出的读写请求将失败，并且会出现异常。

通过失效转移提升 Aurora 副本要比重新创建主实例快得多。如果 Aurora 数据库集群不包含任何 Aurora 副本，则数据库集群在数据库实例从故障中恢复时不可用。

发生失效转移时，可能会重启某些 Aurora 副本，具体取决于数据库引擎版本。例如，在 Aurora MySQL 中，Aurora 在失效转移期间仅重启写入器数据库实例和失效转移目标。有关不同 Aurora 数据库引擎版本的重启行为的更多信息，请参阅[重启 Amazon Aurora 数据库集群或 Amazon Aurora 数据库实例](USER_RebootCluster.md)。有关重启或失效转移时页面缓存会发生什么情况的信息，请参阅[自动恢复页面缓存](Aurora.Overview.Reliability.md#Aurora.Overview.CacheWarming)。

对于高可用性场景，建议您创建一个或多个 Aurora 副本。您的 Aurora 数据库集群应该与主实例具有相同的数据库实例类，并且位于不同可用区中。有关将 Aurora 副本作为失效转移目标的更多信息，请参阅 [Aurora 数据库集群的容错能力](Concepts.AuroraHighAvailability.md#Aurora.Managing.FaultTolerance)。

您无法为未加密的 Aurora 数据库集群创建已加密的 Aurora 副本。您无法为加密的 Aurora 数据库集群创建未加密的 Aurora 副本。

**提示**  
 您可以使用 Aurora 集群内的 Aurora 副本作为唯一复制形式，以保持数据高可用性。您还可以将内置 Aurora 复制与其他类型的复制结合使用。这样做可以帮助进一步提高您的数据的高可用性和地理分布水平。

有关如何创建 Aurora 副本的详细信息，请参阅[将 Aurora 副本添加到数据库集群](aurora-replicas-adding.md)。

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

除了 Aurora 副本以外，您还可以通过以下选项与 Aurora MySQL 进行复制：
+ 不同AWS区域中的 Aurora MySQL 数据库集群。
  +  您可以使用 Aurora Global Database 跨多个区域复制数据。有关详细信息，请参阅 [使用 Aurora Global Database 跨 AWS 区域的高可用性](Concepts.AuroraHighAvailability.md#Concepts.AuroraHighAvailability.GlobalDB) 
  +  利用 MySQL 二进制日志 (binlog) 复制，您可以在不同的 AWS 区域中创建 Aurora MySQL 数据库集群的 Aurora 只读副本。通过这种方式，每个集群最多可以创建五个只读副本，且每个副本位于不同区域。
+ 相同区域中的两个 Aurora MySQL 数据库集群（通过使用 MySQL 二进制日志(binlog) 复制实现）。
+ 一个作为数据源的 RDS for MySQL 数据库实例，一个 Aurora MySQL 数据库集群（通过创建 RDS for MySQL 数据库实例的 Aurora 只读副本实现）。通常，此方法用于迁移到 Aurora MySQL，而非持续复制。

有关与 Aurora MySQL 进行复制的更多信息，请参阅[使用 Amazon Aurora MySQL 进行复制](AuroraMySQL.Replication.md)。

## 使用 Aurora PostgreSQL 进行复制
<a name="Aurora.Replication.AuroraPostgreSQL"></a>

除了 Aurora 副本之外，您还可以通过以下选项使用 Aurora PostgreSQL 进行复制：
+ 使用 Aurora Global Database 时，在 1 个区域中有 1 个主 Aurora 数据库集群，在不同区域中最多有 10 个只读辅助数据库集群。Aurora PostgreSQL 不支持跨区域 Aurora 副本。不过，您可以使用 Aurora Global Database 将 Aurora PostgreSQL 数据库集群的读取功能扩展到多个 AWS 区域，从而实现可用性目标。有关更多信息，请参阅 [使用 Amazon Aurora Global Database](aurora-global-database.md)。
+ 相同区域中的两个 Aurora PostgreSQL 数据库集群（通过使用 PostgreSQL 的逻辑复制功能实现）。
+ 一个作为数据源的 RDS for PostgreSQL 数据库实例和一个 Aurora PostgreSQL 数据库集群（通过创建 RDS for PostgreSQL 数据库实例的 Aurora 只读副本实现）。通常，此方法用于迁移到 Aurora PostgreSQL，而非持续复制。

有关与 Aurora PostgreSQL 进行复制的更多信息，请参阅[使用 Amazon Aurora PostgreSQL 进行复制](AuroraPostgreSQL.Replication.md)。