跨 Amazon Web Services 区域复制 Amazon Aurora MySQL 数据库集群 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

对于每个源数据库集群,您最多可以具有 5 个作为只读副本的跨区域数据库集群。

注意

作为跨区域只读副本的替代方案,您可以使用 Aurora 全局数据库以最小的延迟时间来扩展读取操作。一个 Aurora 全局数据库在一个 Amazon Web Services 区域中有一个主 Aurora 数据库集群,在不同区域中最多有五个备用只读数据库集群。每个辅助数据库集群最多可以包含 16 个(而不是 15)Aurora 副本。从主数据库集群到所有辅助集群的复制由 Aurora 存储层而不是由数据库引擎处理,因此复制更改的延迟最短,通常不到 1 秒。将数据库引擎排除在复制过程之外意味着数据库引擎专用于处理工作负载。这还意味着您不需要配置或管理 Aurora MySQL 二进制日志(二进制日志记录)复制。要了解更多信息,请参阅 使用 Amazon Aurora Global Database

当您在另一个 Amazon Web Services 区域中创建 Aurora MySQL 数据库集群只读副本时,您应了解:

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

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

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

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

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

    有关 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 数据库集群以使更改生效。

有关对 Aurora MySQL 使用二进制日志记录的更多信息,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。有关修改 Aurora MySQL 配置参数的更多信息,请参阅 Amazon Aurora 数据库集群和数据库实例参数使用参数组

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

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

在使用 Amazon Web Services Management Console 为 Aurora MySQL 创建跨区域只读副本时,Amazon RDS 先在目标 Amazon Web Services 区域中创建一个数据库集群,然后自动为该数据库集群创建一个数据库实例以作为主实例。

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

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

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

使用Amazon Web Services Management Console创建作为跨区域只读副本的 Aurora MySQL 数据库集群
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在 Amazon Web Services Management Console的右上角,选择托管源数据库集群的 Amazon Web Services 区域。

  3. 在导航窗格中,选择 Databases (数据库)

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

  5. 对于 Actions(操作),请选择 Create cross-Region read replica(创建跨区域只读副本)。

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

    选项 描述

    目标区域

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

    目标数据库子网组

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

    公开访问

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

    加密

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

    Amazon KMS key

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

    数据库实例类

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

    多可用区部署

    选择 Yes(是),可在目标 Amazon Web Services 区域的另一个可用区中创建新数据库集群的只读副本以支持故障转移。有关多可用区的详细信息,请参阅区域及可用区

    只读副本源

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

    数据库实例标识符

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

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

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

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

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

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

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

    数据库集群标识符

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

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

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

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

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

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

    优先级

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

    数据库端口

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

    增强监控

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

    监控角色

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

    粒度

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

    自动次要版本升级

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

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

  7. 选择 Create (创建) 以创建 Aurora 的跨区域只读副本。

使用 CLI 创建作为跨区域只读副本的 Aurora MySQL 数据库集群
  1. 在要创建只读副本数据库集群的 Amazon Web Services 区域中调用 Amazon CLI create-db-cluster 命令。包括 --replication-source-identifier 选项并指定要创建只读副本的源数据库集群的 Amazon Resource Name (ARN)。

    对于由 --replication-source-identifier 标识的数据库集群已加密的跨区域复制,请指定 --kms-key-id 选项和 --storage-encrypted 选项。

    注意

    通过指定 --storage-encrypted 并提供 --kms-key-id 的值,您可以设置从未加密数据库集群到加密只读副本的跨区域复制。

    您无法指定 --master-username--master-user-password 参数。这些值取自源数据库集群。

    以下代码示例从 us-west-2 区域的一个未加密数据库集群快照中创建 us-east-1 区域的只读副本。在 us-east-1 区域调用命令。此示例指定了生成主用户密码并在 Secrets Manager 中对其进行管理的 --manage-master-user-password 选项。有关更多信息,请参阅使用 Amazon Aurora 和 Amazon Secrets Manager 管理密码。或者,您可以使用 --master-password 选项自行指定和管理密码。

    对于 Linux、macOS 或 Unix:

    aws rds create-db-cluster \ --db-cluster-identifier sample-replica-cluster \ --engine aurora \ --replication-source-identifier arn:aws: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:rds:us-west-2:123456789012:cluster:sample-master-cluster

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

    对于 Linux、macOS 或 Unix:

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

    对于 Windows:

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

    如果未指定 --source-region,请指定 --pre-signed-url 值。预签名 URL 包含签名版本 4 签名的请求,该请求用于在源 create-db-cluster中调用的 Amazon Web Services 区域 命令。要了解有关 pre-signed-url 选项的更多信息,请参阅《Amazon CLI 命令参考》中的 create-db-cluster

  2. 使用 Amazon CLI describe-db-clusters 命令检查数据库集群是否已变为可用状态,如以下示例中所示。

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

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

    对于 Linux、macOS 或 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

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

使用 API 创建作为跨区域只读副本的 Aurora MySQL 数据库集群
  1. 在要创建只读副本数据库集群的 Amazon Web Services 区域中调用 RDS API CreateDBCluster 操作。包括 ReplicationSourceIdentifier 参数并指定要创建只读副本的源数据库集群的 Amazon Resource Name (ARN)。

    对于由 ReplicationSourceIdentifier 标识的数据库集群已加密的跨区域复制,应指定 KmsKeyId 参数并将 StorageEncrypted 参数设置为 true

    注意

    您可以将 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: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: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

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

查看 Amazon Aurora MySQL 跨区域副本

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

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

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

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

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

  1. 提升只读副本。

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

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

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

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

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

  1. 停止向只读副本源数据库集群写入任何事务,然后等待对只读副本完成所有更新。在源数据库集群完成数据库更新后,只读副本才会进行数据库更新,且这种复制滞后可能会有很大差异。使用 ReplicaLag 指标确定只读副本完成所有更新的时间。ReplicaLag 指标记录只读副本数据库实例滞后于源数据库实例的时间量。当 ReplicaLag 指标达到 0 时,即表示只读副本已赶上源数据库实例进度。

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

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

    注意

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

将 Aurora MySQL 只读副本提升为数据库集群
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在控制台中,选择 Instances (实例)

    此时将显示实例窗格。

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

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

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

  5. 在确认页面上,选择 Promote read replica(提升只读副本)。

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

对于 Linux、macOS 或 Unix:

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

对于 Windows:

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

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

Amazon Aurora MySQL 跨区域副本故障排除

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

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

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

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

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

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

对于任意 Amazon Web Services 区域中的每个源数据库集群,您最多可以具有 5 个作为只读副本的跨区域数据库集群。如果在特定 Amazon Web Services 区域中,您已有数据库集群的最大数量只读副本,则必须先删除一个现有副本,然后才能在该区域中创建新的跨区域数据库集群。

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

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