Amazon Aurora
Aurora 用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

跨 AWS 区域复制 Amazon Aurora MySQL 数据库集群

您可以在与源数据库集群不同的 AWS 区域中创建 Amazon Aurora MySQL 数据库集群作为只读副本。采用此方法可增强灾难恢复能力,允许您将读取操作扩展到更靠近用户的 AWS 区域,并使从一个 AWS 区域迁移到另一个 AWS 区域的过程变得更轻松。

您可以创建加密和不加密数据库集群的只读副本。如果加密了源数据库集群,则必须加密只读副本。

对于每个源数据库集群,您最多可以具有 5 个作为只读副本的跨区域数据库集群。当您在另一个 AWS 区域中创建 Aurora MySQL 数据库集群只读副本时,您应了解以下事项:

  • 源数据库集群和跨区域只读副本数据库集群最多可以具有 15 个 Aurora 副本以及数据库集群的主实例。通过使用该功能,您可以扩展源 AWS 区域和复制目标 AWS 区域的读取操作。

  • 在跨区域方案中,由于各区域之间的网络通道更长,因此,源数据集群和只读副本之间的滞后时间更长。

  • 跨区域复制时传输的数据可产生 Amazon RDS 数据传输费用。以下跨区域复制操作会针对传输到源 AWS 区域以外的数据收取费用:

    • 在创建只读副本时,Amazon RDS 将创建源集群的快照,并将快照传输到只读副本区域。

    • 对于源数据库中做出的每个数据修改,Amazon RDS 都会将数据从源区域传输到只读副本区域。

    有关 Amazon RDS 数据传输定价的更多信息,请参阅 Amazon Aurora 定价

  • 您可以为引用相同源数据库集群的只读副本运行多个并发创建或删除操作。不过,您必须保持在每个源数据库集群中具有 5 个只读副本的限制。

  • 为了有效地进行复制,每个只读副本应具有与源数据库集群相同数量的计算和存储资源。如果扩展源数据库集群,您还应扩展只读副本。

开始之前

在创建作为跨区域只读副本的 Aurora MySQL 数据库集群之前,必须先在源 Aurora MySQL 数据库集群上启用二进制日志记录。Aurora MySQL 的跨区域复制使用 MySQL 二进制复制来重放对跨区域只读副本数据库集群的更改。

要在 Aurora MySQL 数据库集群上启用二进制日志记录,请更新源数据库集群的 binlog_format 参数。binlog_format 参数是默认集群参数组中的集群级参数。如果数据库集群使用默认的数据库集群参数组,则需创建新的数据库集群参数组来修改 binlog_format 设置。建议您将 binlog_format 设置为 MIXED。不过,您也可以将 binlog_format 设置为 ROWSTATEMENT (如果您需要特定的二进制日志格式)。重启您的 Aurora 数据库集群以使更改生效。

有关更多信息,请参阅 Amazon Aurora 数据库集群和数据库实例参数使用数据库参数组和数据库集群参数组

创建作为跨区域只读副本的 Amazon Aurora MySQL 数据库集群

您可以使用 AWS 管理控制台、AWS Command Line Interface (AWS CLI) 或 Amazon RDS API 创建作为跨区域只读副本的 Aurora 数据库集群。您可以从加密和未加密的数据库集群中创建跨区域只读副本。

在使用 AWS 管理控制台为 Aurora MySQL 创建跨区域只读副本时,Amazon RDS 先在目标 AWS 区域中创建一个数据库集群,然后为该数据库集群创建一个数据库实例以作为主实例。

使用 AWS CLI 或 RDS API 创建跨区域只读副本时,您需要首先在目标 AWS 区域创建数据库集群,然后等待它变为活动状态。一旦处于活动状态,您就可以为该数据库集群创建一个数据库实例作为主实例。

当只读副本数据库集群的主实例可用时,复制开始。

执行以下过程从 Aurora MySQL 数据库集群创建跨区域只读副本。这些步骤适用于从加密和未加密的数据库集群中创建只读副本。

控制台

使用 AWS 管理控制台创建作为跨区域只读副本的 Aurora MySQL 数据库集群

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在 AWS 管理控制台的右上角,选择托管源数据库集群的 AWS 区域。

  3. 在导航窗格中,选择 Instances

  4. 选择要为其创建跨区域只读副本的数据库实例的复选框。对于 Actions (操作),选择 Create cross region read replica (创建跨区域只读副本)

  5. Create cross region read replica (创建跨区域只读副本) 页面上,选择跨区域只读副本数据库集群的选项设置,如下表中所述。

    选项 说明

    目标区域

    选择要托管新的跨区域只读副本数据库集群的 AWS 区域。

    目标数据库子网组

    选择要用于跨区域只读副本数据库集群的数据库子网组。

    公开访问

    选择 Yes 可为跨区域只读副本数据库集群提供一个公有 IP 地址;否则请选择 No

    加密

    选择启用加密可对该数据库集群启用静态加密。有关更多信息,请参阅加密 Amazon Aurora 资源

    主密钥

    仅当加密设置为启用加密时可用。选择用于加密该数据库集群的主密钥。有关更多信息,请参阅加密 Amazon Aurora 资源

    数据库实例类

    选择定义数据库集群中主实例的处理和内存要求的数据库实例类。有关数据库实例类选项的更多信息,请参阅选择数据库实例类

    多可用区部署

    选择,可在目标 AWS 区域的另一个可用区中创建新数据库集群的备用副本以支持故障转移。有关多可用区的详细信息,请参阅选择区域和可用区

    只读副本源

    选择要为其创建跨区域只读副本的源数据库集群。

    数据库实例标识符

    键入跨区域只读副本数据库集群中主实例的名称。此标识符在新数据库集群主实例的终端节点地址中使用。

    数据库实例标识符具有以下限制:

    • 它必须包含 1 到 63 个字母数字字符或连字符。

    • 它的第一个字符必须是字母。

    • 它不能以连字符结束或包含两个连续连字符。

    • 它对于每个 AWS 区域每个 AWS 账户的所有数据库实例必须是唯一的。

    由于跨区域只读副本数据库集群是从源数据库集群的快照创建的,因此,只读副本的主用户名和主密码与源数据库集群的主用户名和主密码相同。

    数据库集群标识符

    键入跨区域只读副本数据库集群的名称,它对于副本的目标 AWS 区域中的账户是唯一的。此标识符在数据库集群的集群终端节点地址中使用。有关集群终端节点的信息,请参阅 Amazon Aurora 连接管理

    数据库集群标识符具有以下限制:

    • 它必须包含 1 到 63 个字母数字字符或连字符。

    • 它的第一个字符必须是字母。

    • 它不能以连字符结束或包含两个连续连字符。

    • 它对于每个 AWS 区域每个 AWS 账户的所有数据库集群必须是唯一的。

    Priority

    选择新数据库集群的主实例的故障转移优先级。此优先级决定从主实例故障恢复时提升 Aurora 副本的顺序。如果您未选择值,则默认值为 tier-1。有关更多信息,请参阅Aurora 数据库集群的容错能力

    数据库端口

    指定应用程序和实用程序用来访问数据库的端口。Aurora 数据库集群默认为使用默认 MySQL 端口 3306。有些公司的防火墙不允许连接到此端口。如果您的公司防火墙阻止使用默认端口,请为新数据库集群选择其他端口。

    增强监测

    选择启用增强监测可启用您的数据库集群在其上运行的操作系统的实时指标收集。有关更多信息,请参阅增强监测

    监控角色

    仅当增强监测设置为启用增强监测时可用。选择您创建的 IAM 角色以允许 Amazon RDS 与 Amazon CloudWatch Logs 通信,或选择默认以让 RDS 为您创建一个名为 rds-monitoring-role 的角色。有关更多信息,请参阅增强监测

    粒度

    仅当增强监测设置为启用增强监测时可用。设置为数据库集群收集指标的时间间隔(以秒为单位)。

    自动次要版本升级

    该设置不适用于 Aurora MySQL 数据库集群。

    有关 Aurora MySQL 引擎更新的更多信息,请参阅Amazon Aurora MySQL 的数据库引擎更新

  6. 选择创建以创建 Aurora 的跨区域只读副本。

AWS CLI

使用 CLI 创建作为跨区域只读副本的 Aurora MySQL 数据库集群

  1. 在要创建只读副本数据库集群的 AWS 区域中调用 AWS CLI create-db-cluster 命令。包括 --replication-source-identifier 选项并指定要创建只读副本的源数据库集群的 Amazon 资源名称 (ARN)。

    对于由 --replication-source-identifier 标识的数据库集群已加密的跨区域复制,必须指定 --kms-key-id 选项和 --storage-encrypted 选项。还必须指定 --source-region--pre-signed-url 选项。使用 --source-region 自动生成预签名 URL 作为对 CreateDBCluster API 操作的有效请求,该操作能够在包含要复制的加密数据库集群的源 AWS 区域中执行。使用 --pre-signed-url 需要您改为手动构建预签名 URL。KMS 密钥 ID 用于加密只读副本,且必须是在目标 AWS 区域中有效的 KMS 加密密钥。要了解有关这些选项的更多信息,请参阅create-db-cluster

    注意

    通过指定 --storage-encrypted 并提供 --kms-key-id 的值,您可以设置从未加密数据库集群到加密只读副本的跨区域复制。在这种情况下,不需要指定 --source-region--pre-signed-url

    您无需包含 --master-username--master-user-password 参数,因为这些值是从源数据库集群中获取的。

    以下代码示例从 us-west-2 区域的一个未加密数据库集群快照中创建 us-east-1 区域的只读副本。在 us-east-1 区域调用命令。

    针对 Linux、OS X 或 Unix:

    aws rds create-db-cluster \ --db-cluster-identifier sample-replica-cluster \ --engine aurora \ --replication-source-identifier arn:aws-cn:rds:us-west-2:123456789012:cluster:sample-master-cluster

    对于 Windows:

    aws rds create-db-cluster ^ --db-cluster-identifier sample-replica-cluster ^ --engine aurora ^ --replication-source-identifier arn:aws-cn:rds:us-west-2:123456789012:cluster:sample-master-cluster

    以下代码示例从 us-west-2 区域的一个加密数据库集群快照中创建 us-east-1 区域的只读副本。在 us-east-1 区域调用命令。

    针对 Linux、OS X 或 Unix:

    aws rds create-db-cluster \ --db-cluster-identifier sample-replica-cluster \ --engine aurora \ --replication-source-identifier arn:aws-cn:rds:us-west-2:123456789012:cluster:sample-master-cluster \ --kms-key-id my-us-east-1-key \ --source-region us-west-2 \ --storage-encrypted

    对于 Windows:

    aws rds create-db-cluster ^ --db-cluster-identifier sample-replica-cluster ^ --engine aurora ^ --replication-source-identifier arn:aws-cn:rds:us-west-2:123456789012:cluster:sample-master-cluster ^ --kms-key-id my-us-east-1-key ^ --source-region us-west-2 ^ --storage-encrypted
  2. 使用 AWS CLI describe-db-clusters 命令检查数据库集群是否已变为可用状态,如以下示例中所示。

    aws rds describe-db-clusters --db-cluster-identifier sample-replica-cluster

    describe-db-clusters 结果显示状态 available 时,创建数据库集群的主实例以便复制能够开始。为此,请使用 AWS CLI create-db-instance 命令,如以下示例中所示。

    针对 Linux、OS X 或 Unix:

    aws rds create-db-instance \ --db-cluster-identifier sample-replica-cluster \ --db-instance-class db.r3.large \ --db-instance-identifier sample-replica-instance \ --engine aurora

    对于 Windows:

    aws rds create-db-instance ^ --db-cluster-identifier sample-replica-cluster ^ --db-instance-class db.r3.large ^ --db-instance-identifier sample-replica-instance ^ --engine aurora

    在数据库实例已创建并可用后,复制将开始。您可以调用 AWS CLI describe-db-instances 命令以确定数据库实例是否可用。

RDS API

使用 API 创建作为跨区域只读副本的 Aurora MySQL 数据库集群

  1. 在您要创建只读副本数据库集群的 AWS 区域中调用 RDS API CreateDBCluster 操作。包括 ReplicationSourceIdentifier 参数并指定要创建只读副本的源数据库集群的 Amazon 资源名称 (ARN)。

    对于由 ReplicationSourceIdentifier 标识的数据库集群已加密的跨区域复制,您必须指定 KmsKeyId 参数并将 StorageEncrypted 参数设置为 true。还必须指定 PreSignedUrl 参数。预签名 URL 必须是对 CreateDBCluster API 操作的有效请求,该操作能够在包含要复制的加密数据库集群的源 AWS 区域中执行。KMS 密钥 ID 用于加密只读副本,且必须是在目标 AWS 区域中有效的 KMS 加密密钥。要自动而非手动生成预签名的 URL,请改用具有 --source-region 选项的 AWS CLI create-db-cluster 命令。

    注意

    您可以将 StorageEncrypted 指定为 true 并提供 KmsKeyId 值,以设置从未加密数据库集群到加密只读副本的跨区域复制。在这种情况下,不需要指定 PreSignedUrl

    您无需包含 MasterUsernameMasterUserPassword 参数,因为这些值是从源数据库集群中获取的。

    以下代码示例从 us-west-2 区域的一个未加密数据库集群快照中创建 us-east-1 区域的只读副本。在 us-east-1 区域调用操作。

    https://rds.us-east-1.amazonaws.com/ ?Action=CreateDBCluster &ReplicationSourceIdentifier=arn:aws-cn:rds:us-west-2:123456789012:cluster:sample-master-cluster &DBClusterIdentifier=sample-replica-cluster &Engine=aurora &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-10-31 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20161117/us-east-1/rds/aws4_request &X-Amz-Date=20160201T001547Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=a04c831a0b54b5e4cd236a90dcb9f5fab7185eb3b72b5ebe9a70a4e95790c8b7

    以下代码示例从 us-west-2 区域的一个加密数据库集群快照中创建 us-east-1 区域的只读副本。在 us-east-1 区域调用操作。

    https://rds.us-east-1.amazonaws.com/ ?Action=CreateDBCluster &KmsKeyId=my-us-east-1-key &StorageEncrypted=true &PreSignedUrl=https%253A%252F%252Frds.us-west-2.amazonaws.com%252F %253FAction%253DCreateDBCluster %2526DestinationRegion%253Dus-east-1 %2526KmsKeyId%253Dmy-us-east-1-key %2526ReplicationSourceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%25253A123456789012%25253Acluster%25253Asample-master-cluster %2526SignatureMethod%253DHmacSHA256 %2526SignatureVersion%253D4 %2526Version%253D2014-10-31 %2526X-Amz-Algorithm%253DAWS4-HMAC-SHA256 %2526X-Amz-Credential%253DAKIADQKE4SARGYLE%252F20161117%252Fus-west-2%252Frds%252Faws4_request %2526X-Amz-Date%253D20161117T215409Z %2526X-Amz-Expires%253D3600 %2526X-Amz-SignedHeaders%253Dcontent-type%253Bhost%253Buser-agent%253Bx-amz-content-sha256%253Bx-amz-date %2526X-Amz-Signature%253D255a0f17b4e717d3b67fad163c3ec26573b882c03a65523522cf890a67fca613 &ReplicationSourceIdentifier=arn:aws-cn:rds:us-west-2:123456789012:cluster:sample-master-cluster &DBClusterIdentifier=sample-replica-cluster &Engine=aurora &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-10-31 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20161117/us-east-1/rds/aws4_request &X-Amz-Date=20160201T001547Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=a04c831a0b54b5e4cd236a90dcb9f5fab7185eb3b72b5ebe9a70a4e95790c8b7
  2. 如下例所示,通过使用 RDS API DescribeDBClusters 操作检查数据库集群是否可用。

    https://rds.us-east-1.amazonaws.com/ ?Action=DescribeDBClusters &DBClusterIdentifier=sample-replica-cluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-10-31 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20161117/us-east-1/rds/aws4_request &X-Amz-Date=20160201T002223Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=84c2e4f8fba7c577ac5d820711e34c6e45ffcd35be8a6b7c50f329a74f35f426

    DescribeDBClusters 结果显示状态 available 时,创建数据库集群的主实例以便复制能够开始。为此,请使用 RDS API CreateDBInstance 操作,如以下示例所示。

    https://rds.us-east-1.amazonaws.com/ ?Action=CreateDBInstance &DBClusterIdentifier=sample-replica-cluster &DBInstanceClass=db.r3.large &DBInstanceIdentifier=sample-replica-instance &Engine=aurora &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-10-31 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20161117/us-east-1/rds/aws4_request &X-Amz-Date=20160201T003808Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=125fe575959f5bbcebd53f2365f907179757a08b5d7a16a378dfa59387f58cdb

    在数据库实例已创建并可用后,复制将开始。您可以调用 AWS CLI DescribeDBInstances 命令以确定数据库实例是否可用。

查看 Amazon Aurora MySQL 跨区域副本

您可以调用 describe-db-clusters AWS CLI 命令或 DescribeDBClusters RDS API 操作以查看 Amazon Aurora MySQL 数据库集群的跨区域复制关系。在响应中,参考任何跨区域只读副本数据库集群的数据库集群标识符的 ReadReplicaIdentifiers 字段,并参考作为复制主实例的源数据库集群 ARN 的 ReplicationSourceIdentifier 元素。

提升只读副本成其成为数据库集群

可将 Aurora MySQL 只读副本提升为独立的数据库集群。提升 Aurora MySQL 只读副本时,其数据库实例将在重启后变得可用。

通常,如果源数据库集群出现故障,可以作为数据恢复方案将 Aurora MySQL 只读副本提升为单独数据库集群。

为此,请先创建只读副本,然后监控源数据库集群的故障。如果出现故障,请执行以下操作:

  1. 提升只读副本。

  2. 将数据库流量定向到提升的数据库集群。

  3. 将提升的数据库集群作为源,创建替代只读副本。

在提升只读副本时,只读副本将成为独立的 Aurora 数据库集群。提升过程可能需要几分钟或更长时间才能完成,具体时间取决于只读副本的大小。将只读副本提升为新数据库集群后,它将与任何其他数据库集群相同。例如,可从中创建只读副本并执行时间点还原操作。还可以为数据库集群创建 Aurora 副本。

由于经过提升的数据库集群不再是只读副本,因此不能再使用它作为复制目标。

以下步骤说明将只读副本提升为数据库集群的一般过程:

  1. 停止向只读副本源数据库集群写入任何事务,然后等待对只读副本完成所有更新。在源数据库集群完成数据库更新后,只读副本才会进行数据库更新,且这种复制滞后可能会有很大差异。使用副本滞后指标确定只读副本完成所有更新的时间。

  2. 使用 Amazon RDS 控制台上的 Promote Read Replica (提升只读副本) 选项、AWS CLI 命令 promote-read-replica-db-clusterPromoteReadReplicaDBCluster Amazon RDS API 操作提升只读副本。

    选择 Aurora MySQL 数据库实例来提升只读副本。在提升只读副本后,Aurora MySQL 数据库集群将被提升为单独数据库集群。故障转移优先级最高的数据库实例将被提升为数据库集群的主数据库实例。其他数据库实例将变为 Aurora 副本。

    注意

    提升过程需要几分钟才能完成。在提升只读副本时,会停止复制并重启数据库实例。完成重启后,只读副本即可作为新数据库集群使用。

控制台

将 Aurora MySQL 只读副本提升为数据库集群

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在 Amazon RDS 控制台中,选择实例

    此时将显示实例窗格。

  3. 实例窗格中,选择要提升的只读副本。

    只读副本将显示为 Aurora MySQL 数据库实例。

  4. 对于操作,选择提升只读副本

  5. 在确认页面上,选择提升只读副本

AWS CLI

要将只读副本提升为数据库集群,请使用 AWS CLI promote-read-replica-db-cluster 命令。

针对 Linux、OS X 或 Unix:

aws rds promote-read-replica-db-cluster \ --db-cluster-identifier mydbcluster

对于 Windows:

aws rds promote-read-replica-db-cluster ^ --db-cluster-identifier mydbcluster
RDS API

要将只读副本提升为数据库集群,请调用 PromoteReadReplicaDBCluster

Amazon Aurora MySQL 跨区域副本问题排查

以下是您在创建 Amazon Aurora 跨区域只读副本时可能遇到的常见错误消息的列表以及指定错误的解决方法。

源集群 [数据库集群 ARN] 未启用二进制日志

要解决该问题,请对源数据库集群启用二进制日志记录。有关更多信息,请参阅 开始之前

源集群 [数据库集群 ARN] 没有在写入方上同步的集群参数组

如果您已更新 binlog_format 数据库集群参数,但尚未重启数据库集群的主实例,则会收到该错误。重启数据库集群的主实例 (即写入方) 并重试。

源集群 [数据库集群 ARN] 已具有此区域中的只读副本

对于任何 AWS 区域中的每个源数据库集群,您只能具有一个作为只读副本的跨区域数据库集群。要创建作为特定 AWS 区域中的只读副本的新跨区域数据库集群,您必须删除现有的跨集群数据库集群。

数据库集群 [数据库集群 ARN] 需要数据库引擎升级来支持跨区域复制

要解决该问题,请将源数据库集群中的所有实例的数据库引擎版本升级到最新的数据库引擎版本,然后再次尝试创建跨区域只读副本数据库。