

# 使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica"></a>

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 可用的区域的列表，请参阅《AWS 一般参考》**中的 [Amazon Aurora](https://docs.aws.amazon.com/general/latest/gr/rande.html#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 数据库集群](AuroraMySQL.Migrating.RDSMySQL.md)。

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

**注意**  
由于 Aurora MySQL 和作为复制主实例的 RDS for MySQL 数据库实例的 MySQL 数据库引擎版本之间的特征不同，可能导致复制问题。如果遇到错误，您可以在 [Amazon RDS 社群论坛](https://forums.aws.amazon.com/forum.jspa?forumID=60)或联系 AWS 支持 以获得帮助。  
如果您的 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 数据库实例的只读副本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)。

## 创建 Aurora 只读副本
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.Create"></a>

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

### 控制台
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.Create.Console"></a>

**从源 RDS for MySQL 数据库实例创建 Aurora 只读副本**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

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

1. 对于**操作**，请选择**创建 Aurora 只读副本**。

1. 按照下表所述，选择 Aurora 只读副本要使用的数据库集群规格。    
<a name="aurora_read_replica_param_advice"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.RDSMySQL.Replica.html)

1. 选择 **Create read replica (创建只读副本)**。

### AWS CLI
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.Create.CLI"></a>

要从源 RDS for MySQL 数据库实例中创建 Aurora 只读副本，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html) 和 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 命令创建新的 Aurora MySQL 数据库集群。当您调用 `create-db-cluster` 命令时，请加入 `--replication-source-identifier` 参数，识别源 MySQL 数据库实例的 Amazon Resource Name (ARN)。有关 Amazon RDS ARN 的更多信息，请参阅 [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-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 只读副本创建主实例。如果您使用 AWS CLI 创建 Aurora 只读副本，则必须明确为数据库集群创建主实例。主实例是在数据库集群中创建的第一个实例。

您可以使用带以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 命令为数据库集群创建主实例。
+ `--db-cluster-identifier`

  数据库集群的名称。
+ `--db-instance-class`

  要用于主实例的数据库实例类的名称。
+ `--db-instance-identifier`

  主实例的名称。
+ `--engine aurora`

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

**Example**  
对于 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 API
<a name="Aurora.Migration.RDSMySQL.Create.API"></a>

要从源 RDS for MySQL 数据库实例中创建 Aurora 只读副本，请使用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html) 和 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) Amazon RDS API 命令创建新的 Aurora 数据库集群和主实例。不要指定主用户名、主密码或数据库名称，因为 Aurora 只读副本使用和源 RDS for MySQL 数据库实例相同的主用户名、主密码和数据库名称。

您可以使用带以下参数的 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html) Amazon RDS API 命令从源 RDS for MySQL 数据库实例为 Aurora 只读副本创建新的 Aurora 数据库集群：
+ `DBClusterIdentifier`

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

  要与该数据库集群关联的数据库子网组的名称。
+ `Engine=aurora`
+ `KmsKeyId`

  用于选择性加密数据库集群的 AWS KMS key，具体取决于是否加密了 MySQL 数据库实例。
  + 如果 MySQL 数据库实例未加密，请指定一个加密密钥来对数据库集群进行静态加密。否则，将使用您的账户的默认加密密钥对数据库集群进行静态加密。
  + 如果 MySQL 数据库实例已加密，请指定一个加密密钥，以便使用指定的加密密钥对您的数据库集群进行静态加密。否则，将使用 MySQL 数据库实例的加密密钥对您的数据库集群进行静态加密。
**注意**  
您无法从已加密的 MySQL 数据库实例创建未加密的数据库集群。
+ `ReplicationSourceIdentifier`

  源 MySQL 数据库实例的 Amazon Resource Name (ARN)。有关 Amazon RDS ARN 的更多信息，请参阅 [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-rds)。
+ `VpcSecurityGroupIds`

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

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

**Example**  

```
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 只读副本创建主实例。如果您使用 AWS CLI 创建 Aurora 只读副本，则必须明确为数据库集群创建主实例。主实例是在数据库集群中创建的第一个实例。

您可以使用带以下参数的 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) Amazon RDS API 命令为数据库集群创建主实例：
+ `DBClusterIdentifier`

  数据库集群的名称。
+ `DBInstanceClass`

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

  主实例的名称。
+ `Engine=aurora`

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

**Example**  

```
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 只读副本
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.View"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 查看 Aurora 数据库集群的 MySQL 与 Aurora MySQL 的复制关系。

### 控制台
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.View.Console"></a>

**要查看 Aurora 只读副本的主 MySQL 数据库实例**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择 Aurora 只读副本的数据库集群以显示其详细信息。主 MySQL 数据库实例信息位于 **Replication source**（复制源）字段中。  
![\[查看 MySQL 主数据库\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/aurora-repl6.png)

### AWS CLI
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.View.CLI"></a>

要针对您的 Aurora MySQL 数据库集群，使用 AWS CLI 查看 MySQL 与 Aurora MySQL 的复制关系，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) 和 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令。

要确定哪个 MySQL 数据库实例是主实例，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) 并在 `--db-cluster-identifier` 选项中指定 Aurora 只读副本的集群标识符。请参阅作为复制主实例的数据库实例的 ARN 输出中的 `ReplicationSourceIdentifier` 元素。

要确定哪个数据库集群是 Aurora 只读副本，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 并在 `--db-instance-identifier` 选项中指定 MySQL 数据库实例的实例标识符。请参阅 Aurora 只读副本的数据库集群标识符输出中的 `ReadReplicaDBClusterIdentifiers` 元素。

**Example**  
对于 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 只读副本
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.Promote"></a>

迁移完成后，您可以使用 AWS 管理控制台或 AWS CLI 将 Aurora 只读副本提升为独立的数据库集群。

然后，您可以将客户端应用程序引导到 Aurora 只读副本的端点。有关 Aurora 终端节点的更多信息，请参阅[Amazon Aurora 端点连接](Aurora.Overview.Endpoints.md)。提升会很快完成，您可以在提升过程中读取和写入 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 只读副本。

### 控制台
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.Promote.Console"></a>

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

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

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

1. 对于**操作**，请选择**提升**。

1. 选择 **Promote Read Replica**（提升只读副本）。

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

**要确认 Aurora 只读副本已提升**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Events**。

1. 在 **Events**（事件）页面上，验证您提升的集群是否存在 `Promoted Read Replica cluster to a stand-alone database cluster` 事件。

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

### AWS CLI
<a name="AuroraMySQL.Migrating.RDSMySQL.Replica.Promote.CLI"></a>

要将 Aurora 只读副本提升为独立数据库集群，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica-db-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica-db-cluster.html)AWS CLI 命令。

**Example**  
对于 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
```