为什么我无法为 RDS for PostgreSQL 实例创建 Aurora 只读副本?

上次更新日期:2022 年 6 月 8 日

我正在尝试从 RDS 控制台为 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 实例创建一个 Amazon Aurora 只读副本。但是,在 Amazon RDS 控制台中,执行此操作的选项显示为灰色。

简短描述

您可以使用 Amazon RDS for PostgreSQL 数据库实例,通过在迁移过程中使用 Aurora 只读副本,来创建兼容 Amazon Aurora PostgreSQL 的新版数据库集群。在这种情况下,Aurora 集群是使用读取器实例创建的。此集群称为副本集群,充当 RDS for PostgreSQL 实例的只读副本。创建副本集群并将数据迁移到复制延迟为零的 Aurora 后,您可以通过提升 Aurora 只读副本来执行割接。

要为迁移过程创建 Aurora 只读副本,请参阅创建 Aurora 只读副本

如果使用 Amazon RDS 控制台创建 Aurora 只读副本的选项不可用,请确保您的 Aurora PostgreSQL 版本与 RDS for PostgreSQL 版本兼容。

解决方法

Aurora 只读副本选项仅适用于在同一 AWS 区域和账户内迁移。仅当区域为 RDS for PostgreSQL 数据库实例提供兼容版本的 Aurora PostgreSQL 时,该选项才可用。Aurora PostgreSQL 版本必须与 RDS for PostgreSQL 版本相同,或者是同一主要版本系列中的更高次要版本。

例如,要使用此技术迁移 RDS for PostgreSQL 11.14 数据库实例,区域必须提供以下任一服务:

  • Aurora PostgreSQL 版本 11.14
  • PostgreSQL 版本 11 系列中更高的次要版本

要查看新创建的数据库实例的可用版本和默认版本的列表,请运行 AWS 命令行界面(AWS CLI)命令 describe-db-engine-versions

aws rds describe-db-engine-versions --engine postgres --query DBEngineVersions[*].EngineVersion
aws rds describe-db-engine-versions --engine aurora-postgresql --query DBEngineVersions[*].EngineVersion

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI

您可以比较这两个命令的结果,以检查 Aurora PostgreSQL 的引擎版本是否与 RDS for PostgreSQL 的引擎版本兼容。

如果无法使用 RDS 控制台创建只读副本的选项,请使用 AWS CLI 创建 Aurora 只读副本。

要使用 AWS CLI 从源 RDS for PostgreSQL 数据库实例创建 Aurora 只读副本,请运行 create-db-cluster 命令。请务必将 replication-source-identifier 参数设置为源实例的 ARN。运行此命令将创建一个无头的 Aurora 数据库集群。无头集群是没有任何实例的集群存储。

创建集群后,使用 create-db-instance 命令为您的数据库集群创建主实例。

aws rds create-db-cluster --db-cluster-identifier example-aurora-cluster --db-subnet-group-name example-db-subnet --vpc-security-group-ids example-security-group --engine aurora-postgresql --engine-version <same-as-your-rds-instance-version> --replication-source-identifier example-rds-source-instance-arn 
aws rds create-db-instance --db-cluster-identifier example-aurora-cluster --db-instance-class example-instance-class --db-instance-identifier example-instance identifier --engine aurora-postgresql