

# 使用数据库实例只读副本
<a name="USER_ReadRepl"></a>

只读副本是数据库实例的只读副本。您可以将从应用程序发出的查询路由到只读副本，以减轻主数据库实例上的负载。通过这种方法，可以实现弹性横向扩展并超越单个数据库实例的容量限制，以处理读取密集型数据库工作负载。

要从源数据库实例创建只读副本，Amazon RDS 使用数据库引擎的内置复制特征。有关在特定引擎上使用只读副本的信息，请参阅以下部分：
+ [使用适用于 Amazon RDS for Db2 的副本](db2-replication.md)
+ [使用 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.md)
+ [在 Amazon RDS 中使用 Microsoft SQL Server 的只读副本](SQLServer.ReadReplicas.md)
+ [使用 MySQL 只读副本](USER_MySQL.Replication.ReadReplicas.md)
+ [使用 Amazon RDS for Oracle 的只读副本](oracle-read-replicas.md)
+ [使用 Amazon RDS for PostgreSQL 只读副本](USER_PostgreSQL.Replication.ReadReplicas.md)

在从源数据库实例创建只读副本后，源将成为主数据库实例。当您更新主数据库实例时，Amazon RDS 将它们异步复制到只读副本。下图显示了源数据库实例正在复制到不同可用区（AZ）中的只读副本。客户端拥有对主数据库实例的读/写访问权限以及对副本的只读访问权限。

![\[只读副本配置\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/read-replica.png)


只读副本按标准数据库实例计费，费率与用于副本的数据库实例类相同。在位于同一个 Amazon Web Services 区域中的源数据库实例与只读副本之间复制数据所产生的数据传输不收费。有关更多信息，请参阅[跨区域复制成本](USER_ReadRepl.XRgn.md#USER_ReadRepl.XRgn.Costs)和[Amazon RDS 的数据库实例计费 ](User_DBInstanceBilling.md)。

**Topics**
+ [Amazon RDS 只读副本概述](#USER_ReadRepl.Overview)
+ [数据库引擎的只读副本之间的差异](USER_ReadRepl.Overview.Differences.md)
+ [创建只读副本](USER_ReadRepl.Create.md)
+ [将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)
+ [监控只读复制](USER_ReadRepl.Monitoring.md)
+ [在不同的 中创建只读副本Amazon Web Services 区域](USER_ReadRepl.XRgn.md)

## Amazon RDS 只读副本概述
<a name="USER_ReadRepl.Overview"></a>

以下各节讨论数据库*实例*只读副本。有关多可用区数据库*集群* 只读副本的信息，请参阅[使用 Amazon RDS 的多可用区数据库集群只读副本](USER_MultiAZDBCluster_ReadRepl.md)。

**Topics**
+ [只读副本的使用案例](#USER_ReadRepl.Overview.use-cases)
+ [只读副本的工作原理](#USER_ReadRepl.Overview.how-it-works)
+ [多可用区部署中的只读副本](#USER_ReadRepl.Overview.maz-replicas)
+ [跨区域只读副本](#USER_ReadRepl.Overview.xregion-replicas)
+ [只读副本存储类型](#USER_ReadRepl.Overview.replica-storage)
+ [从副本创建副本的限制](#USER_ReadRepl.Overview.circular-replication)
+ [删除副本时的注意事项](#USER_ReadRepl.Overview.deletion-considerations)

### 只读副本的使用案例
<a name="USER_ReadRepl.Overview.use-cases"></a>

为给定的源数据库实例部署一个或多个只读副本在各种情况下都可能有意义，包括：
+ 扩展用于执行大量读取数据库工作负载的单个数据库实例的计算资源或 I/O 容量。可以将过多的读取流量引导到一个或多个只读副本。
+ 当源数据库实例不可用时，为读取流量提供服务。在某些情况下，您的源数据库实例可能无法处理 I/O 请求（例如，由于备份或计划维护而暂停 I/O)。在这些情况下，您可以将读取流量引导到只读副本。对于这种使用案例，请注意，由于源数据库实例不可用，因而只读副本中的数据可能处于“静态”。
+ 对于业务报告或数据仓库方案，您可能希望针对只读副本（而生产数据库实例）运行业务报告查询。
+ 实施灾难恢复。如果主数据库实例出现故障，则将只读副本提升为独立的实例作为灾难恢复解决方案。

### 只读副本的工作原理
<a name="USER_ReadRepl.Overview.how-it-works"></a>

创建只读副本时，请指定现有的数据库实例作为源。紧接着，Amazon RDS 拍摄源实例的快照，并根据该快照创建一个只读实例。然后，每当主数据库实例发生更改时，Amazon RDS 就使用数据库引擎的异步复制方法来更新只读副本。

只读副本是仅允许只读连接的数据库实例。例外情况是 RDS for Db2 和 RDS for Oracle DB 数据库引擎，它们分别支持处于备用模式和装载模式的副本数据库。备用副本和装载副本不接受用户连接，因此无法为只读工作负载提供服务。备用副本和装载副本的主要用途是跨区域灾难恢复。有关更多信息，请参阅[使用适用于 Amazon RDS for Db2 的副本](db2-replication.md)和[使用 Amazon RDS for Oracle 的只读副本](oracle-read-replicas.md)。

应用程序连接到只读副本就像连接到任何数据库实例一样。Amazon RDS 复制源数据库实例中的所有数据库。

您必须手动创建只读副本。RDS 不支持自动扩缩只读副本，即在读取需求发生变化时自动添加或移除只读副本。

### 多可用区部署中的只读副本
<a name="USER_ReadRepl.Overview.maz-replicas"></a>

您可以为数据库实例配置只读副本，此外还配置了备用副本以实现多可用区部署中的高可用性。使用备用副本进行复制是同步的。与只读副本不同，备用副本无法处理读取流量。

在以下场景中，客户端拥有对一个可用区中的主数据库实例的读取/写入权限。主实例将更新异步复制到第二个可用区中的只读副本，还将更新同步复制到第三个可用区中的备用副本。客户端仅对只读副本具有读取权限。

![\[只读副本和备用副本配置\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/read-and-standby-replica.png)


有关高可用性和备用副本的更多信息，请参阅[配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)。

### 跨区域只读副本
<a name="USER_ReadRepl.Overview.xregion-replicas"></a>

在某些情况下，只读副本与其主数据库实例位于不同的 Amazon Web Services 区域。在这些情况下，Amazon RDS 在主数据库实例与只读副本之间设置安全通道。Amazon RDS 建立启用安全通道所需的任何Amazon安全配置，例如添加安全组条目。有关跨区域只读副本的更多信息，请参阅[在不同的 中创建只读副本Amazon Web Services 区域](USER_ReadRepl.XRgn.md)。

本章中的信息适用于在源数据库实例所在的相同 Amazon Web Services 区域中或在单独的 Amazon Web Services 区域中创建 Amazon RDS 只读副本。以下信息不适用于对 Amazon EC2 实例上运行的实例或本地实例设置复制操作。

### 只读副本存储类型
<a name="USER_ReadRepl.Overview.replica-storage"></a>

默认情况下，将创建与源数据库实例的存储类型相同的只读副本。但是，您可基于下表中列出的选项创建与源数据库实例的存储类型不同的只读副本。

<a name="rds-read-replica-storage-reference"></a>[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)

**注意**  
增加只读副本的分配存储空间时，它必须至少增加 10%。如果您尝试将该值增加不到 10％，则会得到错误。

### 从副本创建副本的限制
<a name="USER_ReadRepl.Overview.circular-replication"></a>

Amazon RDS 不支持循环复制。您不能将数据库实例配置为充当现有数据库实例的复制源。您只可以基于现有数据库实例创建新的只读副本。例如，如果 **MySourceDBInstance** 复制到 **ReadReplica1**，您不能将 **ReadReplica1** 配置为复制回 **MySourceDBInstance**。

对于 RDS for MariaDB 和 RDS for MySQL 以及特定版本的 RDS for PostgreSQL，您可以基于现有只读副本创建只读副本。例如，您可以从现有副本 **ReadReplica1** 创建新的只读副本 **ReadReplica2**。对于 RDS for Db2、RDS for Oracle 和 RDS for SQL Server，您不能基于现有只读副本来创建只读副本。

### 删除副本时的注意事项
<a name="USER_ReadRepl.Overview.deletion-considerations"></a>

RDS 不支持自动扩缩只读副本。因此，RDS 不会在需求上升时增加副本数量，也不会在需求下降时减少副本数量。如果您不再需要只读副本，则使用用于删除数据库实例的相同机制手动删除它们。如果您在同一 Amazon Web Services 区域中删除源数据库实例而未删除其只读副本，则每个副本都会提升为独立的数据库实例。

有关删除数据库实例的信息，请参阅[删除数据库实例](USER_DeleteInstance.md)。有关只读副本提升的信息，请参阅[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。有关删除跨区域只读副本的源数据库实例的信息，请参阅[跨区域复制注意事项](USER_ReadRepl.XRgn.md#USER_ReadRepl.XRgn.Cnsdr)。