使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群

Aurora 使用 MySQL 数据库引擎的二进制日志复制功能,为源 RDS for MySQL 数据库实例创建一个特殊类型的数据库集群,称为 Aurora 只读副本。对源 RDS for MySQL 数据库实例的更新将异步复制到 Aurora 只读副本。

我们建议您创建源 RDS for MySQL 数据库实例的 Aurora 只读副本,以使用该功能从 RDS for MySQL 数据库实例迁移到 Aurora MySQL 数据库集群。如果 RDS for MySQL 数据库实例和 Aurora 只读副本之间的副本滞后为 0,您可以将客户端应用程序引导到 Aurora 只读副本,然后停止复制以使 Aurora 只读副本成为独立的 Aurora MySQL 数据库集群。准备迁移需要花费一段时间,每 TiB 数据大约需要几小时。

有关 Aurora 可用的区域的列表,请参阅《Amazon Web Services 一般参考》中的 Amazon Aurora

在创建 RDS for MySQL 数据库实例的 Aurora 只读副本时,Amazon RDS 为源 RDS for MySQL 数据库实例创建数据库快照(Amazon RDS 私有,不产生费用)。Amazon RDS 之后会将数据从数据库快照迁移到 Aurora 只读副本。在将数据从数据库快照迁移到新的 Aurora MySQL 数据库集群后,Amazon RDS 开始在 RDS for MySQL 数据库实例和 Aurora MySQL 数据库集群之间进行复制。如果 RDS for MySQL 数据库实例中包含的表使用 InnoDB 之外的存储引擎,或者使用压缩行格式,您可以在创建 Aurora 只读副本之前更改这些表以使用 InnoDB 存储引擎和动态行格式,从而加快创建 Aurora 只读副本的过程。有关将 MySQL 数据库快照复制到 Aurora MySQL 数据库集群的过程的更多信息,请参阅将数据从 RDS for MySQL DB 数据库实例迁移到 Amazon Aurora MySQL 数据库集群

一个 RDS for MySQL 数据库实例只能有一个 Aurora 只读副本。

注意

由于 Aurora MySQL 和作为复制主实例的 RDS for MySQL 数据库实例的 MySQL 数据库引擎版本之间的特征不同,可能导致复制问题。如果遇到错误,您可以在 Amazon RDS 社群论坛或联系 Amazon Web Services Support 以获得帮助。

如果您的 RDS for MySQL 数据库实例已经是跨区域只读副本的来源,则无法创建 Aurora 只读副本。

您无法从一些较早的 RDS for MySQL 8.0 版本(包括 8.0.11、8.0.13 和 8.0.15)迁移到 Aurora MySQL 版本 3.05 及更高版本。我们建议您在迁移之前先升级到 RDS for MySQL 版本 8.0.28。

有关 MySQL 只读副本的更多信息,请参阅使用 MariaDB、MySQL 和 PostgreSQL 数据库实例的只读副本

创建 Aurora 只读副本

您可以使用控制台、Amazon CLI 或 RDS API 为 RDS for MySQL 数据库实例创建 Aurora 只读副本。

从源 RDS for MySQL 数据库实例创建 Aurora 只读副本
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

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

  3. 选择要作为 Aurora 只读副本源的 MySQL 数据库实例。

  4. 对于操作,请选择创建 Aurora 只读副本

  5. 按照下表所述,选择 Aurora 只读副本要使用的数据库集群规格。

    选项 描述

    数据库实例类

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

    多可用区部署

    选择 Create Replica in Different Zone(在不同区域创建副本)可在目标 Amazon 区域的另一个可用区中创建新数据库集群的备用副本以支持故障转移。有关多可用区的详细信息,请参阅区域及可用区

    数据库实例标识符

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

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

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

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

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

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

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

    Virtual Private Cloud (VPC)

    选择要托管数据库集群的 VPC。选择 Create new VPC (新建 VPC) 以让 Aurora 为您创建 VPC。有关更多信息,请参阅数据库集群先决条件

    DB subnet group(数据库子网组)

    选择要用于数据库集群的数据库子网组。选择 Create new DB subnet group (创建新的数据库子网组) 以让 Aurora 为您创建数据库子网组。有关更多信息,请参阅“数据库集群先决条件”。

    公开可用性

    选择 Yes 可向数据库集群提供公有 IP 地址;否则,请选择 No。数据库集群可以混合使用公有和私有数据库实例。有关隐藏实例以防止公开访问的更多信息,请参阅对互联网隐藏 VPC 中的数据库集群

    可用区

    确定您是否希望指定特定的可用区。有关可用区的更多信息,请参阅区域及可用区

    VPC security group (firewall) [VPC 安全组(防火墙)]

    选择 Create new VPC security group (新建 VPC 安全组) 以让 Aurora 为您创建 VPC 安全组。选择选择现有的 VPC 安全组,然后指定一个或多个 VPC 安全组以保护对数据库集群的网络访问。有关更多信息,请参阅“数据库集群先决条件”。

    数据库端口

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

    数据库参数组

    为 Aurora MySQL 集群选择数据库参数组。Aurora 具有一个可使用的默认数据库参数组,您也可以创建自己的数据库参数组。有关数据库参数组的更多信息,请参阅 使用参数组

    数据库集群参数组

    为 Aurora MySQL 集群选择数据库集群参数组。Aurora 具有一个可使用的默认数据库集群参数组,您也可以创建自己的数据库集群参数组。有关数据库集群参数组的更多信息,请参阅 使用参数组

    加密

    如果您不希望对新的 Aurora 数据库集群进行加密,请选择禁用加密。为要静态加密的新 Aurora 数据库集群选择启用加密。如果选择启用加密,您必须选择一个 KMS 密钥以作为 Amazon KMS key 值。

    如果 MySQL 数据库实例未加密,请指定一个加密密钥来对数据库集群进行静态加密。

    如果 MySQL 数据库实例已加密,请指定一个加密密钥,以便使用指定的加密密钥对您的数据库集群进行静态加密。您可以指定 MySQL 数据库快照使用的加密密钥或其他密钥。您无法从已加密的 MySQL 数据库实例创建未加密的数据库集群。

    优先级

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

    备份保留期

    选择 Aurora 保留数据库的备份副本的时间长度 (1 到 35 天)。可使用备份副本对数据库执行时间点还原 (PITR),以还原到第二个时间点。

    增强监控

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

    监控角色

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

    粒度

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

    自动次要版本升级

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

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

    维护窗口

    选择选择时段并指定可以进行系统维护的每周时间范围。或者,为 Aurora 选择 No preference (无首选项) 以随机分配一个时段。

  6. 选择 Create read replica (创建只读副本)

要从源 RDS for MySQL 数据库实例中创建 Aurora 只读副本,请使用 create-db-clustercreate-db-instance Amazon CLI 命令创建新的 Aurora MySQL 数据库集群。当您调用 create-db-cluster 命令时,请加入 --replication-source-identifier 参数,识别源 MySQL 数据库实例的 Amazon Resource Name (ARN)。有关 Amazon RDS ARN 的更多信息,请参阅 Amazon Relational Database Service (Amazon RDS)

不要指定主用户名、主密码或数据库名称,因为 Aurora 只读副本使用和源 MySQL 数据库实例相同的主用户名、主密码和数据库名称。

对于 Linux、macOS 或 Unix:

aws rds create-db-cluster --db-cluster-identifier sample-replica-cluster --engine aurora \ --db-subnet-group-name mysubnetgroup --vpc-security-group-ids sg-c7e5b0d2 \ --replication-source-identifier arn:aws:rds:us-west-2:123456789012:db:primary-mysql-instance

对于 Windows:

aws rds create-db-cluster --db-cluster-identifier sample-replica-cluster --engine aurora ^ --db-subnet-group-name mysubnetgroup --vpc-security-group-ids sg-c7e5b0d2 ^ --replication-source-identifier arn:aws:rds:us-west-2:123456789012:db:primary-mysql-instance

如果您使用控制台创建 Aurora 只读副本,Aurora 将自动为您的数据库集群 Aurora 只读副本创建主实例。如果您使用 Amazon CLI 创建 Aurora 只读副本,则必须明确为数据库集群创建主实例。主实例是在数据库集群中创建的第一个实例。

您可以使用带以下参数的 create-db-instance Amazon CLI 命令为数据库集群创建主实例。

  • --db-cluster-identifier

    数据库集群的名称。

  • --db-instance-class

    要用于主实例的数据库实例类的名称。

  • --db-instance-identifier

    主实例的名称。

  • --engine aurora

在该示例中,您将使用 myinstanceclass 中指定的数据库实例类为名为 myreadreplicacluster 的数据库集群创建一个名为 myreadreplicainstance 的主实例。

对于 Linux、macOS 或 Unix:

aws rds create-db-instance \ --db-cluster-identifier myreadreplicacluster \ --db-instance-class myinstanceclass \ --db-instance-identifier myreadreplicainstance \ --engine aurora

对于 Windows:

aws rds create-db-instance ^ --db-cluster-identifier myreadreplicacluster ^ --db-instance-class myinstanceclass ^ --db-instance-identifier myreadreplicainstance ^ --engine aurora

要从源 RDS for MySQL 数据库实例中创建 Aurora 只读副本,请使用 CreateDBClusterCreateDBInstance Amazon RDS API 命令创建新的 Aurora 数据库集群和主实例。不要指定主用户名、主密码或数据库名称,因为 Aurora 只读副本使用和源 RDS for MySQL 数据库实例相同的主用户名、主密码和数据库名称。

您可以使用带以下参数的 CreateDBCluster Amazon RDS API 命令从源 RDS for MySQL 数据库实例为 Aurora 只读副本创建新的 Aurora 数据库集群:

  • DBClusterIdentifier

    要创建的数据库集群的名称。

  • DBSubnetGroupName

    要与该数据库集群关联的数据库子网组的名称。

  • Engine=aurora

  • KmsKeyId

    用于选择性加密数据库集群的 Amazon KMS key,具体取决于是否加密了 MySQL 数据库实例。

    • 如果 MySQL 数据库实例未加密,请指定一个加密密钥来对数据库集群进行静态加密。否则,将使用您的账户的默认加密密钥对数据库集群进行静态加密。

    • 如果 MySQL 数据库实例已加密,请指定一个加密密钥,以便使用指定的加密密钥对您的数据库集群进行静态加密。否则,将使用 MySQL 数据库实例的加密密钥对您的数据库集群进行静态加密。

      注意

      您无法从已加密的 MySQL 数据库实例创建未加密的数据库集群。

  • ReplicationSourceIdentifier

    源 MySQL 数据库实例的 Amazon Resource Name (ARN)。有关 Amazon RDS ARN 的更多信息,请参阅 Amazon Relational Database Service (Amazon RDS)

  • VpcSecurityGroupIds

    要与该数据库集群关联的 EC2 VPC 安全组列表。

在该示例中,您将从 ARN 设置为 mysqlprimaryARN、与名为 mysubnetgroup 的数据库子网组和名为 mysecuritygroup 的 VPC 安全组关联的源 MySQL 数据库实例创建一个名为 myreadreplicacluster 的数据库集群。

https://rds.us-east-1.amazonaws.com/ ?Action=CreateDBCluster &DBClusterIdentifier=myreadreplicacluster &DBSubnetGroupName=mysubnetgroup &Engine=aurora &ReplicationSourceIdentifier=mysqlprimaryARN &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-10-31 &VpcSecurityGroupIds=mysecuritygroup &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20150927/us-east-1/rds/aws4_request &X-Amz-Date=20150927T164851Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=6a8f4bd6a98f649c75ea04a6b3929ecc75ac09739588391cd7250f5280e716db

如果您使用控制台创建 Aurora 只读副本,Aurora 将自动为您的数据库集群 Aurora 只读副本创建主实例。如果您使用 Amazon CLI 创建 Aurora 只读副本,则必须明确为数据库集群创建主实例。主实例是在数据库集群中创建的第一个实例。

您可以使用带以下参数的 CreateDBInstance Amazon RDS API 命令为数据库集群创建主实例:

  • DBClusterIdentifier

    数据库集群的名称。

  • DBInstanceClass

    要用于主实例的数据库实例类的名称。

  • DBInstanceIdentifier

    主实例的名称。

  • Engine=aurora

在该示例中,您将使用 myinstanceclass 中指定的数据库实例类为名为 myreadreplicacluster 的数据库集群创建一个名为 myreadreplicainstance 的主实例。

https://rds.us-east-1.amazonaws.com/ ?Action=CreateDBInstance &DBClusterIdentifier=myreadreplicacluster &DBInstanceClass=myinstanceclass &DBInstanceIdentifier=myreadreplicainstance &Engine=aurora &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-09-01 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20140424/us-east-1/rds/aws4_request &X-Amz-Date=20140424T194844Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=bee4aabc750bf7dad0cd9e22b952bd6089d91e2a16592c2293e532eeaab8bc77

查看 Aurora 只读副本

您可以使用 Amazon Web Services Management Console 或 Amazon CLI 查看 Aurora 数据库集群的 MySQL 与 Aurora MySQL 的复制关系。

要查看 Aurora 只读副本的主 MySQL 数据库实例
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

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

  3. 选择 Aurora 只读副本的数据库集群以显示其详细信息。主 MySQL 数据库实例信息位于 Replication source(复制源)字段中。

    
                                        查看 MySQL 主数据库

要使用 Amazon CLI 针对您的 Aurora MySQL 数据库集群查看 MySQL 与 Aurora MySQL 的复制关系,请使用 describe-db-clustersdescribe-db-instances 命令。

要确定哪个 MySQL 数据库实例是主实例,请使用 describe-db-clusters 并在 --db-cluster-identifier 选项中指定 Aurora 只读副本的集群标识符。请参阅作为复制主实例的数据库实例的 ARN 输出中的 ReplicationSourceIdentifier 元素。

要确定哪个数据库集群是 Aurora 只读副本,请使用 describe-db-instances 并在 --db-instance-identifier 选项中指定 MySQL 数据库实例的实例标识符。请参阅 Aurora 只读副本的数据库集群标识符输出中的 ReadReplicaDBClusterIdentifiers 元素。

对于 Linux、macOS 或 Unix:

aws rds describe-db-clusters \ --db-cluster-identifier myreadreplicacluster
aws rds describe-db-instances \ --db-instance-identifier mysqlprimary

对于 Windows:

aws rds describe-db-clusters ^ --db-cluster-identifier myreadreplicacluster
aws rds describe-db-instances ^ --db-instance-identifier mysqlprimary

提升 Aurora 只读副本

迁移完成后,您可以使用 Amazon Web Services Management Console或 Amazon CLI 将 Aurora 只读副本提升为独立的数据库集群。

然后,您可以将客户端应用程序引导到 Aurora 只读副本的端点。有关 Aurora 终端节点的更多信息,请参阅Amazon Aurora 连接管理。提升会很快完成,您可以在提升过程中读取和写入 Aurora 只读副本。但是在此期间您无法删除 MySQL 主数据库实例,或取消数据库实例和 Aurora 只读副本之间的关联。

在提升 Aurora 只读副本之前,终止写入到源 MySQL 数据库实例的所有事务,然后等待 Aurora 只读副本的副本滞后达到 0。您可以通过对 Aurora 只读副本调用 SHOW SLAVE STATUS(Aurora MySQL 版本 2)或 SHOW REPLICA STATUS(Aurora MySQL 版本 3)命令,以查看 Aurora 只读副本的副本滞后。检查 Seconds behind master 值。

写入主实例的事务终止,且副本滞后为 0 时,可以开始写入 Aurora 只读副本。如果在此之前写入到 Aurora 只读副本,并修改了在 MySQL 主实例上也进行修改的表,则可能会中断复制到 Aurora 的过程。如果发生此情况,您必须删除并重新创建 Aurora 只读副本。

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

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

  3. 选择 Aurora 只读副本的数据库集群。

  4. 对于操作,请选择提升

  5. 选择 Promote Read Replica(提升只读副本)。

升级后,请使用以下步骤确认提升已完成。

要确认 Aurora 只读副本已提升
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Events

  3. Events(事件)页面上,验证您提升的集群是否存在 Promoted Read Replica cluster to a stand-alone database cluster 事件。

提升完成后,MySQL 主数据库实例和 Aurora 只读副本之间的关联会取消,如果您愿意,可以安全删除数据库实例。

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

对于 Linux、macOS 或 Unix:

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

对于 Windows:

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