使用数据库实例只读副本 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用数据库实例只读副本

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

要从源数据库实例创建只读副本,Amazon RDS 使用数据库引擎的内置复制特征。有关在特定引擎上使用只读副本的信息,请参阅以下部分:

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

只读副本配置

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

Amazon RDS 只读副本概述

以下各节讨论数据库实例只读副本。有关多可用区数据库集群 只读副本的信息,请参阅使用 Amazon RDS 的多可用区数据库集群只读副本

只读副本的使用案例

为给定的源数据库实例部署一个或多个只读副本在各种情况下都可能有意义,包括:

  • 扩展用于执行大量读取数据库工作负载的单个数据库实例的计算资源或 I/O 容量。可以将过多的读取流量引导到一个或多个只读副本。

  • 当源数据库实例不可用时,为读取流量提供服务。在某些情况下,您的源数据库实例可能无法处理 I/O 请求(例如,由于备份或计划维护而暂停 I/O)。在这些情况下,您可以将读取流量引导到只读副本。对于这种使用案例,请注意,由于源数据库实例不可用,因而只读副本中的数据可能处于“静态”。

  • 对于业务报告或数据仓库方案,您可能希望针对只读副本(而生产数据库实例)运行业务报告查询。

  • 实施灾难恢复。如果主数据库实例出现故障,则将只读副本提升为独立的实例作为灾难恢复解决方案。

只读副本的工作原理

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

只读副本是仅允许只读连接的数据库实例。一个例外是 RDS for Oracle 数据库引擎,它支持装载模式下的副本数据库。装载副本不接受用户连接,因此无法支持只读工作负载。装载副本的主要用途是跨区域灾难恢复。有关更多信息,请参阅 使用 Amazon RDS for Oracle 的只读副本

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

多可用区部署中的只读副本

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

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

只读副本和备用副本配置

有关高可用性和备用副本的更多信息,请参阅配置和管理 Amazon RDS 的多可用区部署

跨区域只读副本

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

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

数据库引擎的只读副本间的差异

由于 Amazon RDS 数据库引擎执行复制的方式不同,因此您应了解它们具有的几个显著差异,如下表所示:

特征或操作 MySQL 和 MariaDB Oracle PostgreSQL SQL Server

复制方法是什么?

逻辑复制。

物理复制。

物理复制。

物理复制。

如何清除事务日志?

RDS for MySQL 和 RDS for MariaDB 保留尚未应用的任何二进制日志。

如果主数据库实例没有跨区域只读副本,则 Amazon RDS for Oracle 会在源数据库实例上至少保留两个小时的事务日志。两小时之后或在传递存档日志保留小时数设置之后从源数据库实例中清除日志,以时间较长者为准。传递存档日志保留小时数设置之后,仅当日志已成功应用到数据库时,才会从只读副本清除日志。

在某些情况下,主数据库实例可能具有一个或多个跨区域只读副本。如果是这样,则 Amazon RDS for Oracle 将保留源数据库实例上的事务日志,直到将它们传输并应用到所有跨区域只读副本为止。

有关如何设置存档日志保留时间的信息,请参阅保留存档重做日志

PostgreSQL 具有参数 wal_keep_segments,该参数指示保留多少个提前写入日志 (WAL) 文件以便为只读副本提供数据。该参数值指定要保留的日志的数量。

辅助副本不再需要主副本上事务日志文件的虚拟日志文件 (VLF) 后,可以截断该文件。

只有在副本中稳定了日志记录时,才能将 VLF 标记为非活动。无论磁盘子系统在主副本中的速度如何,事务日志都将保留 VLF,直到最慢的副本已进行稳定。

是否能将副本设置为可写?

是。您可将 MySQL 或 MariaDB 只读副本设置为可写。

否。Oracle 只读副本是物理副本,Oracle 不允许写入只读副本。您可以提升只读副本以将它设置为可写。提升的只读副本拥有提出提升请求时的已复制数据。

否。PostgreSQL 只读副本是一个物理副本,PostgreSQL 不允许将只读副本设置为可写。

否。SQL Server 只读副本是物理副本,也不允许写入。您可以提升只读副本以将它设置为可写。提升的只读副本拥有提出提升请求时的已复制数据。

是否能在副本上执行备份?

是。RDS for MySQL 或 RDS for MariaDB 只读副本支持自动备份和手动快照。

是。RDS for Oracle 只读副本支持自动备份和手动快照。

是,您可以创建 RDS for PostgreSQL 只读副本的手动快照。仅 RDS for PostgreSQL 14.1 及更高版本支持只读副本的自动备份。您无法为早于 14.1 的 RDS for PostgreSQL 版本的 PostgreSQL 只读副本启用自动备份。对于 RDS for PostgreSQL 13 和更早版本,如果需要只读副本的备份,请从只读副本创建快照。

否。RDS for SQL Server 只读副本不支持自动备份和手动快照。

是否能使用并行复制?

是。所有支持的 MariaDB 和 MySQL 版本均允许并行复制线程。

是。重做日志数据始终会从主数据库并行传输到其所有只读副本。

否。PostgreSQL 是一个处理复制的过程。

是。重做日志数据始终会从主数据库并行传输到其所有只读副本。

是否可以使副本保持为装载状态而不是只读状态?

否。

是。装载副本的主要用途是跨区域灾难恢复。装载副本不需要具有 Active Data Guard 许可证。有关更多信息,请参阅“使用 Amazon RDS for Oracle 的只读副本”。

否。

否。

只读副本存储类型

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

源数据库实例存储类型 源数据库实例存储分配 只读副本存储类型选项
预置 IOPS 100 GiB–64 TiB 预调配 IOPS、通用型、磁性
通用 100 GiB–64 TiB 预调配 IOPS、通用型、磁性
通用 <100 GiB 通用型,磁性
磁介质 100 GiB–6 TiB 预调配 IOPS、通用型、磁性
磁介质 <100 GiB 通用型,磁性
注意

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

从副本创建副本的限制

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

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

删除副本时的注意事项

如果您不再需要只读副本,则可以使用用于删除数据库实例的相同机制显式删除它们。如果您在同一 Amazon Web Services 区域中删除源数据库实例而不删除其只读副本,则每个只读副本都会提升为独立的数据库实例。有关删除数据库实例的信息,请参阅删除数据库实例。有关只读副本提升的信息,请参阅将只读副本提升为独立的数据库实例

如果您具有跨区域只读副本,请参阅跨区域复制注意事项了解有关删除跨区域只读副本源数据库实例的注意事项。