

# 将数据迁移到 Amazon Aurora MySQL 数据库集群
<a name="AuroraMySQL.Migrating"></a>

对于将数据从现有数据库迁移到 Amazon Aurora MySQL 数据库集群，您有多种选择。您的迁移选项还取决于您从中迁移数据的数据库和您迁移数据的规模。

有两种不同类型的迁移：物理和逻辑。物理迁移意味着使用数据库文件的物理副本来迁移数据库。逻辑迁移意味着通过应用逻辑数据库更改 (如插入、更新和删除) 来完成迁移。

物理迁移有以下优势：
+ 物理迁移比逻辑迁移要快，特别是对于大型数据库。
+ 在进行物理迁移的备份时，数据库性能不会受到影响。
+ 物理迁移可以迁移源数据库中的所有内容，包括复杂的数据库组件。

物理迁移具有以下限制：
+ 必须将 `innodb_page_size` 参数设置为其默认值 (`16KB`)。
+ `innodb_data_file_path` 参数必须仅配置一个使用默认数据文件名 `"ibdata1:12M:autoextend"` 的数据文件。使用此方法无法迁移具有两个数据文件或具有不同名称的数据文件的数据库。

  下面是不允许使用的文件名示例：`"innodb_data_file_path=ibdata1:50M; ibdata2:50M:autoextend"` 和 `"innodb_data_file_path=ibdata01:50M:autoextend"`。
+ 必须将 `innodb_log_files_in_group` 参数设置为其默认值 (`2`)。

逻辑迁移有以下优势：
+ 您可以迁移数据库的子集，如特定表或表的若干部分。
+ 无论物理存储结构如何，都可以迁移数据。

逻辑迁移具有以下限制：
+ 逻辑迁移通常比物理迁移慢。
+ 复杂的数据库组件可能会减慢逻辑迁移过程。在某些情况下，复杂的数据库组件甚至可以阻止逻辑迁移。

下表列出了您的选项以及每个选项的迁移类型。


| 迁移来源 | 迁移类型 | 解决方案 | 
| --- | --- | --- | 
| RDS for MySQL 数据库实例 | 物理 |  首先创建 MySQL 数据库实例的 Aurora MySQL 只读副本，然后可以从 RDS for MySQL 数据库实例进行迁移。如果 MySQL 数据库实例和 Aurora MySQL 只读副本之间的副本滞后为 0，您可以指示客户端应用程序从 Aurora 只读副本中读取数据，然后停止复制以使 Aurora MySQL 只读副本成为单独的 Aurora MySQL 数据库集群以进行读写。有关详细信息，请参阅[使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Migrating.RDSMySQL.Replica.md)。  | 
| RDS for MySQL 数据库快照 | 物理 |  您可以将数据直接从 RDS for MySQL 数据库快照迁移到 Amazon Aurora MySQL 数据库集群。有关详细信息，请参阅[将 RDS for MySQL 快照迁移到 Aurora](AuroraMySQL.Migrating.RDSMySQL.Snapshot.md)。  | 
| 在 Amazon RDS 之外运行的 MySQL 数据库 | 逻辑 |  您可以使用 `mysqldump` 实用程序创建数据的转储，然后将该数据导入现有的 Amazon Aurora MySQL 数据库集群。有关详细信息，请参阅[使用 mysqldump 从 MySQL 逻辑迁移到 Amazon Aurora MySQL](AuroraMySQL.Migrating.ExtMySQL.mysqldump.md)。 要在从外部 MySQL 数据库迁移期间导出数据库用户的元数据，您还可以使用 MySQL Shell 命令而非 `mysqldump`。有关更多信息，请参阅 [Instance Dump Utility, Schema Dump Utility, and Table Dump Utility](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html#mysql-shell-utilities-dump-about)。  从 MySQL 8.0.34 开始，[mysqlpump](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html) 实用程序已弃用。   | 
| 在 Amazon RDS 之外运行的 MySQL 数据库 | 物理 |  您可以将备份文件从数据库复制到 Amazon Simple Storage Service (Amazon S3) 存储桶，然后从这些文件还原 Amazon Aurora MySQL 数据库集群。该选项可能比使用 `mysqldump` 迁移数据要快得多。有关详细信息，请参阅[使用 Percona XtraBackup 和 Amazon S3 从 MySQL 进行物理迁移](AuroraMySQL.Migrating.ExtMySQL.S3.md)。  | 
| 在 Amazon RDS 之外运行的 MySQL 数据库 | 逻辑 |  您可将数据库中的数据另存为文本文件并将这些文件复制到 Amazon S3 存储桶。然后，您可以使用 `LOAD DATA FROM S3` MySQL 命令将数据加载到现有 Aurora MySQL 数据库集群中。有关更多信息，请参阅 [将数据从 Amazon S3 存储桶中的文本文件加载到 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Integrating.LoadFromS3.md)。  | 
| 不与 MySQL 兼容的数据库 | 逻辑 |  您可以使用 AWS Database Migration Service（AWS DMS）从不与 MySQL 兼容的数据库中迁移数据。有关 AWS DMS 的更多信息，请参阅[什么是 AWS Database Migration Service？](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) | 

**注意**  
如果您正在迁移 Amazon RDS 外部的 MySQL 数据库，则仅当您的数据库支持 InnoDB 或 MyISAM 表空间时，表中描述的迁移选项才受支持。  
如果要迁移到 Aurora MySQL 的 MySQL 数据库使用 `memcached`，请在迁移之前删除 `memcached`。  
您无法从一些较早的 MySQL 8.0 版本（包括 8.0.11、8.0.13 和 8.0.15）迁移到 Aurora MySQL 版本 3.05 及更高版本。我们建议您在迁移之前先升级到 MySQL 版本 8.0.28。

# 将数据从外部 MySQL 数据库迁移到 Amazon Aurora MySQL 数据库集群
<a name="AuroraMySQL.Migrating.ExtMySQL"></a>

如果数据库支持 InnoDB 或 MyISAM 表空间，则可以使用以下选项将数据迁移到 Amazon Aurora MySQL 数据库集群：
+ 您可以使用 `mysqldump` 实用程序创建数据的转储，然后将该数据导入现有的 Amazon Aurora MySQL 数据库集群。有关更多信息，请参阅 [使用 mysqldump 从 MySQL 逻辑迁移到 Amazon Aurora MySQL](AuroraMySQL.Migrating.ExtMySQL.mysqldump.md)。
+ 您可以将完整备份文件和增量备份文件从数据库复制到 Amazon S3 桶，然后从这些文件还原到 Amazon Aurora MySQL 数据库集群。该选项可能比使用 `mysqldump` 迁移数据要快得多。有关更多信息，请参阅 [使用 Percona XtraBackup 和 Amazon S3 从 MySQL 进行物理迁移](AuroraMySQL.Migrating.ExtMySQL.S3.md)。

**Topics**
+ [使用 Percona XtraBackup 和 Amazon S3 从 MySQL 进行物理迁移](AuroraMySQL.Migrating.ExtMySQL.S3.md)
+ [使用 mysqldump 从 MySQL 逻辑迁移到 Amazon Aurora MySQL](AuroraMySQL.Migrating.ExtMySQL.mysqldump.md)

# 使用 Percona XtraBackup 和 Amazon S3 从 MySQL 进行物理迁移
<a name="AuroraMySQL.Migrating.ExtMySQL.S3"></a>

您可以将源 MySQL 版本 5.7 或 8.0 数据库中的完整和增量备份文件复制到 Amazon S3 桶中。然后，您可以从这些文件中还原到具有相同的主要数据库引擎版本的 Amazon Aurora MySQL 数据库集群。

该选项可能比使用 `mysqldump` 迁移数据要快得多，因为使用 `mysqldump` 可以重放所有命令，以便在新的 Aurora MySQL 数据库集群中从源数据库重新创建架构和数据。通过复制源 MySQL 数据文件，Aurora MySQL 可以立即将这些文件作为 Aurora MySQL 数据库集群的数据。

还可以在迁移过程中使用二进制日志复制来最大程度地减少停机时间。如果您使用二进制日志复制，则在将数据迁移到 Aurora MySQL 数据库集群时，外部 MySQL 数据库仍对事务保持开放。在创建 Aurora MySQL 数据库集群后，您可以使用二进制日志复制以将 Aurora MySQL 数据库集群与在备份后发生的事务同步。如果 Aurora MySQL 数据库集群与 MySQL 数据库一致，您可以完全切换到 Aurora MySQL 数据库集群以执行新事务，从而完成迁移。有关更多信息，请参阅 [通过复制同步 Amazon Aurora MySQL 数据库集群和 MySQL 数据库](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync)。

**Contents**
+ [限制和注意事项](#AuroraMySQL.Migrating.ExtMySQL.S3.Limits)
+ [开始前的准备工作](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs)
  + [安装 Percona XtraBackup](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.XtraBackup)
  + [所需的权限](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.Permitting)
  + [创建 IAM 服务角色](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.CreateRole)
+ [备份要还原为 Amazon Aurora MySQL 数据库集群的文件](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup)
  + [使用 Percona XtraBackup 创建完整备份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full)
  + [通过 Percona XtraBackup 使用增量备份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr)
  + [备份注意事项](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations)
+ [从 Amazon S3 存储桶还原 Amazon Aurora MySQL 数据库集群](#AuroraMySQL.Migrating.ExtMySQL.S3.Restore)
+ [通过复制同步 Amazon Aurora MySQL 数据库集群和 MySQL 数据库](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync)
  + [配置外部 MySQL 数据库和 Aurora MySQL 数据库集群以进行加密复制](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.ConfigureEncryption)
  + [同步 Amazon Aurora MySQL 数据库集群和外部 MySQL 数据库](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing)
+ [缩短物理迁移到 Amazon Aurora MySQL 的时间](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md)
  + [不支持的表类型](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Tables)
  + [具有不支持的权限的用户账户](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users)
  + [Aurora MySQL 版本 3 中的动态权限](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic)
  + [以 'rdsadmin'@'localhost' 作为定义程序的存储对象](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects)

## 限制和注意事项
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Limits"></a>

以下限制和注意事项适用于从 Amazon S3 桶还原到 Amazon Aurora MySQL 数据库集群：
+ 您只能将数据迁移到新的数据库集群，而不能迁移到现有的数据库集群。
+ 您必须使用 Percona XtraBackup 将数据备份到 S3。有关更多信息，请参阅 [安装 Percona XtraBackup](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.XtraBackup)。
+ Amazon S3 桶和 Aurora MySQL 数据库集群必须位于同一 AWS 区域中。
+ 您无法从以下内容还原：
  + 导出到 Amazon S3 的数据库集群快照。您也无法将数据从数据库集群快照导出迁移到 S3 桶。
  + 加密的源数据库，但您可以加密正在迁移的数据。您也可以在迁移过程中不加密数据。
  + MySQL 5.5 或 5.6 数据库
+ 不支持将 Percona Server for MySQL 作为源数据库，因为它可能在 `mysql` 架构中包含 `compression_dictionary*` 表。
+ 您无法还原到 Aurora Serverless 数据库集群。
+ 主要版本或次要版本都不支持反向迁移。例如，您不能从 MySQL 版本 8.0 迁移到 Aurora MySQL 2 版本（与 MySQL 5.7 兼容），也不能从 MySQL 版本 8.0.32 迁移到与 MySQL 社区版本 8.0.26 兼容的 Aurora MySQL 版本 3.03。
+ 您无法从一些较早的 MySQL 8.0 版本（包括 8.0.11、8.0.13 和 8.0.15）迁移到 Aurora MySQL 版本 3.05 及更高版本。我们建议您在迁移之前先升级到 MySQL 版本 8.0.28。
+ 在 db.t2.micro 数据库实例类上不支持从 Amazon S3 导入。不过，您可以还原到不同的数据库实例类，并稍后更改该数据库实例类。有关数据库实例类的更多信息，请参阅[Amazon Aurora数据库实例类](Concepts.DBInstanceClass.md)。
+ Amazon S3 将上传到 S3 桶的文件大小限制为 5TB。如果备份文件超过 5 TB，则必须将备份文件拆分为较小的文件。
+ Amazon RDS 将上传到 S3 桶的文件数限制为一百万个。如果数据库的备份数据（包括所有完整和增量备份）超过 100 万个文件，请使用 Gzip（.gz）、tar（.tar.gz）或 Percona xbstream（.xbstream）文件将完整和增量备份文件存储在 S3 桶中。Percona XtraBackup 8.0 仅支持使用 Percona xbstream 进行压缩。
+ 要为每个数据库集群提供管理服务，需要在创建数据库集群时创建 `rdsadmin` 用户。由于这是 RDS 中的保留用户，因此以下限制适用：
  + 不会导入具有 `'rdsadmin'@'localhost'` 定义程序的函数、过程、视图、事件和触发器。有关更多信息，请参阅[以 'rdsadmin'@'localhost' 作为定义程序的存储对象](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects)和[Amazon Aurora MySQL 中的主用户权限](AuroraMySQL.Security.md#AuroraMySQL.Security.MasterUser)。
  + 创建 Aurora MySQL 数据库集群时，将创建一个具有支持的最大权限的主用户。从备份还原时，分配给正在导入的用户的任何不受支持的权限都将在导入过程中自动删除。

    要识别可能受此影响的用户，请参阅[具有不支持的权限的用户账户](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users)。有关 Aurora MySQL 中支持的权限的更多信息，请参阅[基于角色的权限模型](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)。
+ 对于 Aurora MySQL 版本 3，不导入动态权限。迁移后可以导入 Aurora 支持的动态权限。有关更多信息，请参阅 [Aurora MySQL 版本 3 中的动态权限](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic)。
+ 不会迁移 `mysql` 架构中用户创建的表。
+ `innodb_data_file_path` 参数必须仅配置一个使用默认数据文件名 `ibdata1:12M:autoextend` 的数据文件。使用此方法无法迁移具有两个数据文件或具有不同名称的数据文件的数据库。

  下面是不允许使用的文件名示例：`innodb_data_file_path=ibdata1:50M`、`ibdata2:50M:autoextend` 和 `innodb_data_file_path=ibdata01:50M:autoextend`。
+ 您无法从在默认 MySQL 数据目录外部定义表的源数据库中迁移。
+ 使用此方法的未压缩备份支持的最大大小目前限制为 64TiB。对于压缩备份，考虑到解压缩空间的需求，此限制会降低。在此类情况下，支持的最大备份大小为（`64 TiB – compressed backup size`）。
+ Aurora MySQL 不支持导入 MySQL 以及其他外部组件和插件。
+ Aurora MySQL 不会还原数据库中的所有内容。我们建议您从源 MySQL 数据库保存数据库架构以及以下项目的值，然后将这些内容添加到已还原的 Aurora MySQL 数据库集群（在创建该集群后）：
  + 用户账户
  + 函数
  + 存储过程
  + 时区信息。从 Aurora MySQL 数据库集群的本地操作系统中加载时区信息。有关更多信息，请参阅 [Amazon Aurora 数据库集群的本地时区](Concepts.RegionsAndAvailabilityZones.md#Aurora.Overview.LocalTimeZone)。

## 开始前的准备工作
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs"></a>

在将数据复制到 Amazon S3 存储桶并从这些文件还原到数据库集群之前，您必须执行以下操作：
+ 在您的本地服务器上安装 Percona XtraBackup。
+ 准许 Aurora MySQL 代表您访问您的 Amazon S3 存储桶。

### 安装 Percona XtraBackup
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.XtraBackup"></a>

Amazon Aurora 可以从使用 Percona XtraBackup 创建的文件还原数据库集群。您可以从[软件下载 - Percona](https://www.percona.com/downloads) 安装 Percona XtraBackup。

对于 MySQL 5.7 迁移，使用 Percona XtraBackup 2.4。

对于 MySQL 8.0 迁移，使用 Percona XtraBackup 8.0。请确保 Percona XtraBackup 版本与您的源数据库的引擎版本兼容。

### 所需的权限
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.Permitting"></a>

要将 MySQL 数据迁移到 Amazon Aurora MySQL 数据库集群，需要几种权限：
+ 请求该 Aurora 从 Amazon S3 存储桶创建新集群的用户必须有权限列出您的AWS账户的存储桶。通过使用 AWS Identity and Access Management（IAM）策略，可以向用户授予该权限。
+ Aurora 需要代表您访问 Amazon S3 存储桶（在该存储桶中，您存储了用于创建 Amazon Aurora MySQL 数据库集群的文件）的权限。您可以使用 IAM 服务角色为 Aurora 授予所需的权限。
+ 发出请求的用户还必须有权限列出您的AWS账户的 IAM 角色。
+ 如果用户发出请求的目的是创建 IAM 服务角色或请求 Aurora 创建 IAM 服务角色 (使用控制台)，则用户必须有权限为您的 AWS 账户创建 IAM 角色。
+ 如果您打算在迁移过程中加密数据，请更新将要执行迁移操作的用户的 IAM 策略，以授予 RDS 对用于加密备份的 AWS KMS keys 的访问权限。有关说明，请参阅 [创建 IAM 策略以访问 AWS KMS 资源](AuroraMySQL.Integrating.Authorizing.IAM.KMSCreatePolicy.md)。

例如，以下 IAM 策略为用户授予所需的最小权限，以使用控制台列出 IAM 角色、创建 IAM 角色、列出您的账户的 Amazon S3 存储桶以及列出 KMS 密钥。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy",
                "s3:ListBucket",
                "kms:ListKeys"
            ],
            "Resource": "*"
        }
    ]
}
```

------

此外，要使用户能够将 IAM 角色与 Amazon S3 存储桶关联，IAM 用户必须具有该 IAM 角色的 `iam:PassRole` 权限。该权限允许管理员限制用户可以将哪些 IAM 角色与 Amazon S3 存储桶关联。

例如，以下 IAM 策略允许用户将名为 `S3Access` 的角色与 Amazon S3 存储桶关联。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowS3AccessRole",
            "Effect":"Allow",
            "Action":"iam:PassRole",
            "Resource":"arn:aws:iam::123456789012:role/S3Access"
        }
    ]
}
```

------

有关 IAM 用户权限的更多信息，请参阅[使用策略管理访问](UsingWithRDS.IAM.md#security_iam_access-manage)。

### 创建 IAM 服务角色
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.CreateRole"></a>

您可以在 AWS 管理控制台中选择**创建新角色**选项（本主题稍后介绍）以创建角色。如果您选择该选项并为新角色指定名称，Aurora 将使用您提供的名称为 Aurora 创建访问 Amazon S3 存储桶所需的 IAM 服务角色。

作为替代方法，您可以使用以下程序手动创建角色。

**为 Aurora 创建 IAM 角色以访问 Amazon S3**

1. 完成 [创建 IAM 策略以访问 Amazon S3 资源](AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.md) 中的步骤。

1. 完成 [创建 IAM 角色以允许 Amazon Aurora 访问AWS服务](AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.md) 中的步骤。

1. 完成 [将 IAM 角色与 Amazon Aurora MySQL 数据库集群关联](AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.md) 中的步骤。

## 备份要还原为 Amazon Aurora MySQL 数据库集群的文件
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup"></a>

您可以使用 Percona XtraBackup 创建 MySQL 数据库文件的完整备份，并且可将备份文件上传到 Amazon S3 存储桶。或者，如果您已使用 Percona XtraBackup 备份您的 MySQL 数据库文件，则可将现有的完整备份和增量备份目录和文件上传到 Amazon S3 存储桶。

**Topics**
+ [使用 Percona XtraBackup 创建完整备份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full)
+ [通过 Percona XtraBackup 使用增量备份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr)
+ [备份注意事项](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations)

### 使用 Percona XtraBackup 创建完整备份
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full"></a>

要创建 MySQL 数据库文件的完整备份，以从 Amazon S3 中还原这些文件来创建 Aurora MySQL 数据库集群，请使用 Percona XtraBackup 实用程序（`xtrabackup`）备份数据库。

例如，以下命令创建 MySQL 数据库的备份并将备份文件存储在 `/on-premises/s3-restore/backup` 文件夹中。

```
xtrabackup --backup --user=<myuser> --password=<password> --target-dir=</on-premises/s3-restore/backup>
```

如果您要将备份压缩为单个文件 (可在需要时进行拆分)，则可以使用 `--stream` 选项来采用下列格式之一保存备份：
+ Gzip (.gz)
+ tar (.tar)
+ Percona xbstream (.xbstream)

以下命令为您的 MySQL 数据库创建一个拆分成多个 Gzip 文件的备份。

```
xtrabackup --backup --user=<myuser> --password=<password> --stream=tar \
   --target-dir=</on-premises/s3-restore/backup> | gzip - | split -d --bytes=500MB \
   - </on-premises/s3-restore/backup/backup>.tar.gz
```

以下命令为您的 MySQL 数据库创建一个拆分成多个 tar 文件的备份。

```
xtrabackup --backup --user=<myuser> --password=<password> --stream=tar \
   --target-dir=</on-premises/s3-restore/backup> | split -d --bytes=500MB \
   - </on-premises/s3-restore/backup/backup>.tar
```

以下命令为您的 MySQL 数据库创建一个拆分成多个 xbstream 文件的备份。

```
xtrabackup --backup --user=<myuser> --password=<password> --stream=xbstream \
   --target-dir=</on-premises/s3-restore/backup> | split -d --bytes=500MB \
   - </on-premises/s3-restore/backup/backup>.xbstream
```

**注意**  
如果您看到以下错误，则可能是由于命令中混用了文件格式所致：  

```
ERROR:/bin/tar: This does not look like a tar archive
```

在使用 Percona XtraBackup 实用程序备份 MySQL 数据库后，您可以将备份目录和文件复制到 Amazon S3 存储桶。

有关创建文件并将其上传到 Amazon S3 存储桶的信息，请参阅 *Amazon S3 入门指南* 中的 [Amazon Simple Storage Service 入门](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。

### 通过 Percona XtraBackup 使用增量备份
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr"></a>

Amazon Aurora MySQL 支持使用 Percona XtraBackup 创建的完整备份和增量备份。如果您已使用 Percona XtraBackup 对 MySQL 数据库文件进行完整备份和增量备份，则无需创建完整备份和将备份文件上传到 Amazon S3。相反，您可以通过将网站备份和增量备份的现有备份目录和文件复制到 Amazon S3 存储桶来节约大量时间。有关更多信息，请参阅 Percona 网站上的[创建增量备份](https://docs.percona.com/percona-xtrabackup/8.0/create-incremental-backup.html)。

在将现有的完整备份和增量备份文件复制到 Amazon S3 存储桶时，您必须以递归方式复制基目录的内容。这些内容包括完整备份以及所有增量备份目录和文件。此副本必须在 Amazon S3 存储桶中保留目录结构。Aurora 将循环访问所有文件和目录。Aurora 使用每个增量备份中包含的 `xtrabackup-checkpoints` 文件来标识基本目录，并按日志序列号（LSN）范围对增量备份进行排序。

有关创建文件并将其上传到 Amazon S3 存储桶的信息，请参阅 *Amazon S3 入门指南* 中的 [Amazon Simple Storage Service 入门](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。

### 备份注意事项
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations"></a>

Aurora 不支持使用 Percona XtraBackup 创建的部分备份。在备份数据库的源文件时，不能使用以下选项创建部分备份：`--tables`、`--tables-exclude`、`--tables-file`、`--databases`、`--databases-exclude` 或 `--databases-file`。

有关使用 Percona XtraBackup 备份数据库的更多信息，请参阅 Percona 网站上的 [Percona XtraBackup - 文档](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)和[使用二进制日志](https://docs.percona.com/percona-xtrabackup/8.0/working-with-binary-logs.html)。

Aurora 支持使用 Percona XtraBackup 创建的增量备份。有关更多信息，请参阅 Percona 网站上的[创建增量备份](https://docs.percona.com/percona-xtrabackup/8.0/create-incremental-backup.html)。

Aurora 根据文件名使用您的备份文件。确保根据文件格式为备份文件指定相应的文件扩展名，例如对于使用 Percona xbstream 格式存储的文件，指定 `.xbstream`。

Aurora 按照字母顺序以及自然数字顺序使用您的备份文件。始终在您发出 `split` 命令时使用 `xtrabackup` 选项，以确保备份文件按适当的顺序写入和命名。

Amazon S3 将上传到 Amazon S3 存储桶的文件大小限制为 5 TB。如果数据库的备份数据超过 5 TB，请使用 `split` 命令将备份文件拆分为多个文件，每个小于 5 TB。

Aurora 将上传到 Amazon S3 存储桶的源文件数限制为 100 万个。在某些情况下，数据库的备份数据 (包括所有完整和增量备份) 可以提供大量文件。在这些情况下，使用 tarball (.tar.gz) 文件，将完整和增量备份文件存储在 Amazon S3 存储桶中。

将文件上传到 Amazon S3 存储桶时，您可以使用服务器端加密来加密数据。之后，您可以通过这些加密文件还原 Amazon Aurora MySQL 数据库集群。Amazon Aurora MySQL 可以从使用以下类型的服务器端加密功能加密的文件还原数据库集群：
+ 使用具有 Amazon S3 托管密钥的服务器端加密 (SSE-S3) – 通过增强的多因素加密使用唯一密钥加密每个对象。
+ 具有 AWS KMS 托管密钥的服务器端加密（SSE-KMS）与 SSE-S3 类似，但您可以选择自己创建和管理加密密钥，并且还具有其他一些区别。

有关在将文件上传到 Amazon S3 存储桶时使用服务器端加密的信息，请参阅 *Amazon S3 开发人员指南* 中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

## 从 Amazon S3 存储桶还原 Amazon Aurora MySQL 数据库集群
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Restore"></a>

您可以使用 Amazon RDS 控制台从 Amazon S3 存储桶中还原备份文件以创建新的 Amazon Aurora MySQL 数据库集群。

**从 Amazon S3 存储桶上的文件还原 Amazon Aurora MySQL 数据库集群**

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

1. 在 Amazon RDS 控制台右上角，选择要在其中创建数据库集群的AWS区域。选择与包含数据库备份的 Amazon S3 存储桶相同的AWS区域。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择 **Restore from S3 (从 S3 还原)**。

1. 选择**从 S3 还原**。

   此时将显示**通过从 S3 还原创建数据库**页面。  
![\[您指定从 S3 还原数据库集群的详细信息的页面\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/AuroraMigrateS3_01.png)

1. 在 **S3 目标**下：

   1. 选择包含备份文件的 **S3 存储桶**。

   1. （可选）对于 **S3 文件夹路径前缀**，输入存储在 Amazon S3 存储桶中的文件的文件路径前缀。

      如果未指定前缀，则 RDS 使用 S3 存储桶的根文件夹中的所有文件和文件夹创建数据库实例。如果指定了前缀，则 RDS 使用 S3 存储桶中文件路径以指定前缀开头的文件和文件夹创建数据库实例。

      例如，假设将备份文件存储在 S3 上名为 backups 的子文件夹中，并且具有多组备份文件，每个文件位于自己的目录 (gzip\$1backup1、gzip\$1backup2，依此类推) 中。在这种情况下，请指定 backups/gzip\$1backup1 前缀以从 gzip\$1backup1 文件夹中的文件还原。

1. 在**引擎选项**下：

   1. 对于 **Engine type**（引擎类型），选择 **Amazon Aurora**。

   1. 对于 **Version**（版本），为还原的数据库实例选择 Aurora MySQL 引擎版本。

1. 对于 **IAM 角色**，您可以选择现有 IAM 角色。

1. （可选）您还可以通过选择 **Create a new role**（创建新角色）为自己创建新的 IAM 角色。如果是这样：

   1. 请输入 **IAM role name**（IAM 角色名称）。

   1.  选择是否**允许访问 KMS 密钥**：
      + 如果您不加密备份文件，请选择**否**。
      + 如果在将备份文件上传到 Amazon S3 时使用 AES-256（SSE-S3）加密这些文件，请选择 **No (否)**。在此情况下，数据将会自动解密。
      + 如果在将备份文件上载到 Amazon S3 时使用 AWS KMS (SSE-KMS) 服务器端加密功能加密这些文件，请选择 **Yes (是)**。接下来，为 **AWS KMS key** 选择正确的 KMS 密钥。

        AWS 管理控制台 将创建一个 IAM 策略以允许 Aurora 解密数据。

      有关更多信息，请参阅 *Amazon S3 开发人员指南* 中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

1. 选择数据库集群的设置，例如数据库集群存储配置、数据库实例类、数据库集群标识符和登录凭证。有关每项设置的信息，请参阅 [Aurora 数据库集群的设置](Aurora.CreateInstance.md#Aurora.CreateInstance.Settings)。

1. 根据需要自定义 Aurora MySQL 数据库集群的其他设置。

1. 选择 **Create database**（创建数据库）以启动您的 Aurora 数据库实例。

在 Amazon RDS 控制台中，新数据库实例显示在数据库实例列表中。数据库实例具有 **creating (创建)** 状态，直到该数据库实例完成创建并可供使用。当状态更改为 **available** 时，您可连接到数据库集群的主实例。根据所分配的数据库实例类和存储的不同，新实例可能需要数分钟时间才能变得可用。

要查看新创建的集群，请在 Amazon RDS 控制台中选择 **Databases(数据库)** 视图，然后选择数据库集群。有关更多信息，请参阅“[查看 Amazon Aurora 数据库集群](accessing-monitoring.md#Aurora.Viewing)”。

![\[Amazon Aurora 数据库实例列表\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/AuroraLaunch04.png)


记下数据库集群的端口和写入器终端节点。在执行写入或读取操作的任何应用程序的 JDBC 和 ODBC 连接字符串中，使用数据库集群的写入器终端节点和端口。

## 通过复制同步 Amazon Aurora MySQL 数据库集群和 MySQL 数据库
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.RepSync"></a>

为了在迁移过程中实现最少或零停机时间，您可以将在 MySQL 数据库中提交的事务复制到 Aurora MySQL 数据库集群。通过复制，数据库集群可以与迁移期间发生的 MySQL 数据库上的事务保持一致。当数据库集群完全一致时，您可以停止复制并完成向 Aurora MySQL 的迁移。

**Topics**
+ [配置外部 MySQL 数据库和 Aurora MySQL 数据库集群以进行加密复制](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.ConfigureEncryption)
+ [同步 Amazon Aurora MySQL 数据库集群和外部 MySQL 数据库](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing)

### 配置外部 MySQL 数据库和 Aurora MySQL 数据库集群以进行加密复制
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.ConfigureEncryption"></a>

要安全地复制数据，您可以使用加密复制。

**注意**  
如果您不需要使用加密复制，可以跳过以下步骤，然后继续参阅 [同步 Amazon Aurora MySQL 数据库集群和外部 MySQL 数据库](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing) 中的说明。

以下是使用加密复制的先决条件：
+ 必须在外部 MySQL 主数据库上启用安全套接字层 (SSL)。
+ 必须为 Aurora MySQL 数据库集群准备客户端密钥和客户端证书。

在加密复制期间，Aurora MySQL 数据库集群充当 MySQL 数据库服务器的客户端。Aurora MySQL 客户端的证书和密钥必须是 .pem 格式的文件。

**配置外部 MySQL 数据库和 Aurora MySQL 数据库集群以进行加密复制**

1. 确保您为加密复制做好以下准备：
   + 如果您没有在外部 MySQL 主数据库上启用 SSL，并且没有准备客户端密钥和客户端证书，请在 MySQL 数据库服务器上启用 SSL 并生成所需的客户端密钥和客户端证书。
   + 如果在外部主数据库上启用了 SSL，请提供 Aurora MySQL 数据库集群的客户端密钥和证书。如果未提供，请为 Aurora MySQL 数据库集群生成新密钥和证书。要对客户端证书进行签名，您必须拥有您用来在外部 MySQL 主数据库上配置 SSL 的证书颁发机构密钥。

   有关更多信息，请参阅 MySQL 文档中的[使用 openssl 创建 SSL 证书和密钥](https://dev.mysql.com/doc/refman/5.6/en/creating-ssl-files-using-openssl.html)。

   您需要证书颁发机构证书、客户端密钥和客户端证书。

1. 通过 SSL 以主用户身份连接到 Aurora MySQL 数据库集群。

   有关通过 SSL 连接到 Aurora MySQL 数据库集群的信息，请参阅[与 Aurora MySQL 数据库集群的 TLS 连接](AuroraMySQL.Security.md#AuroraMySQL.Security.SSL)。

1. 运行 [mysql.rds\$1import\$1binlog\$1ssl\$1material](mysql-stored-proc-replicating.md#mysql_rds_import_binlog_ssl_material) 存储过程，以将 SSL 信息导入到 Aurora MySQL 数据库集群中。

   对于 `ssl_material_value` 参数，将 Aurora MySQL 数据库集群的 .pem 格式文件中的信息插入到正确的 JSON 负载中。

   以下示例将 SSL 信息导入到 Aurora MySQL 数据库集群中。在 .pem 格式文件中，主体代码通常比示例中显示的主体代码长。

   ```
   call mysql.rds_import_binlog_ssl_material(
   '{"ssl_ca":"-----BEGIN CERTIFICATE-----
   AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
   hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
   lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
   qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
   BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   -----END CERTIFICATE-----\n","ssl_cert":"-----BEGIN CERTIFICATE-----
   AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
   hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
   lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
   qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
   BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   -----END CERTIFICATE-----\n","ssl_key":"-----BEGIN RSA PRIVATE KEY-----
   AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
   hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
   lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
   qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
   BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   -----END RSA PRIVATE KEY-----\n"}');
   ```

   有关更多信息，请参阅[mysql.rds\$1import\$1binlog\$1ssl\$1material](mysql-stored-proc-replicating.md#mysql_rds_import_binlog_ssl_material)和[与 Aurora MySQL 数据库集群的 TLS 连接](AuroraMySQL.Security.md#AuroraMySQL.Security.SSL)。
**注意**  
运行该过程后，密钥会存储在文件中。稍后如果要删除文件，您可以运行 [mysql.rds\$1remove\$1binlog\$1ssl\$1material](mysql-stored-proc-replicating.md#mysql_rds_remove_binlog_ssl_material) 存储过程。

### 同步 Amazon Aurora MySQL 数据库集群和外部 MySQL 数据库
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing"></a>

您可以使用复制，同步 Amazon Aurora MySQL 数据库集群和 MySQL 数据库。

**通过复制同步 Aurora MySQL 数据库集群和 MySQL 数据库**

1. 确保外部 MySQL 数据库的 /etc/my.cnf 文件具有相关条目。

   如果不需要加密复制，请确保先为外部 MySQL 数据库启用二进制日志 (binlogs) 并禁用 SSL。以下是 /etc/my.cnf 文件中未加密数据的相关条目。

   ```
   log-bin=mysql-bin
   server-id=2133421
   innodb_flush_log_at_trx_commit=1
   sync_binlog=1
   ```

   如果需要加密复制，请确保先为外部 MySQL 数据库启用 SSL 和二进制日志。/etc/my.cnf 文件的条目包括 MySQL 数据库服务器的 .pem 文件位置。

   ```
   log-bin=mysql-bin
   server-id=2133421
   innodb_flush_log_at_trx_commit=1
   sync_binlog=1
   
   # Setup SSL.
   ssl-ca=/home/sslcerts/ca.pem
   ssl-cert=/home/sslcerts/server-cert.pem
   ssl-key=/home/sslcerts/server-key.pem
   ```

   您可以通过以下命令验证是否已启用 SSL。

   ```
   mysql> show variables like 'have_ssl';
   ```

   您的输出应类似于以下内容。

   ```
   +~-~-~-~-~-~-~-~-~-~-~-~-~-~--+~-~-~-~-~-~--+
   | Variable_name | Value |
   +~-~-~-~-~-~-~-~-~-~-~-~-~-~--+~-~-~-~-~-~--+
   | have_ssl      | YES   |
   +~-~-~-~-~-~-~-~-~-~-~-~-~-~--+~-~-~-~-~-~--+
   1 row in set (0.00 sec)
   ```

1. 确定复制的开始二进制日志位置。您可以在稍后步骤中指定启动复制的位置。

   **使用 AWS 管理控制台**

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

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

   1. 在**事件**列表中，记下**从二进制日志文件名还原**事件的位置。  
![\[查看 MySQL 主数据库\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/aurora-mysql-rep-binary-log-position.png)

   **使用 AWS CLI**

   您也可以使用 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-events.html) AWS CLI 命令获取二进制日志文件名和位置。下面显示了示例 `describe-events` 命令。

   ```
   PROMPT> aws rds describe-events
   ```

   在输出中，确定显示二进制日志位置的事件。

1. 连接到外部 MySQL 数据库时，创建要用于复制的用户。此账户仅用于复制，并且必须仅供您的域使用以增强安全性。以下是示例。

   ```
   mysql> CREATE USER '<user_name>'@'<domain_name>' IDENTIFIED BY '<password>';
   ```

   该用户需要 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。向该用户授予这些权限。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<user_name>'@'<domain_name>';
   ```

   如果您需要使用加密复制，则需为复制用户要求 SSL 连接。例如，您可以使用以下语句来要求用户账户的 SSL 连接 `<user_name>`。

   ```
   GRANT USAGE ON *.* TO '<user_name>'@'<domain_name>' REQUIRE SSL;
   ```
**注意**  
如果不包括 `REQUIRE SSL`，则复制连接可能会无提示地返回到未加密连接。

1. 在 Amazon RDS 控制台中，将托管外部 MySQL 数据库的服务器的 IP 地址添加到 Aurora MySQL 数据库集群的 VPC 安全组中。有关修改 VPC 安全组的更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   您可能还需要配置本地网络以允许来自 Aurora MySQL 数据库集群的 IP 地址的连接，以便它能与外部 MySQL 数据库进行通信。要查找 Aurora MySQL 数据库集群的 IP 地址，请使用 `host` 命令。

   ```
   host <db_cluster_endpoint>
   ```

   主机名是 Aurora MySQL 数据库集群终端节点中的 DNS 名称。

1. 通过运行 [mysql.rds\$1reset\$1external\$1master（Aurora MySQL 版本 2）](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 或 [mysql.rds\$1reset\$1external\$1source（Aurora MySQL 版本 3）](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source) 存储过程，启用二进制日志复制。此存储过程使用以下语法。

   ```
   CALL mysql.rds_set_external_master (
     host_name
     , host_port
     , replication_user_name
     , replication_user_password
     , mysql_binary_log_file_name
     , mysql_binary_log_file_location
     , ssl_encryption
   );
   
   CALL mysql.rds_set_external_source (
     host_name
     , host_port
     , replication_user_name
     , replication_user_password
     , mysql_binary_log_file_name
     , mysql_binary_log_file_location
     , ssl_encryption
   );
   ```

   有关参数的信息，请参阅[mysql.rds\$1reset\$1external\$1master（Aurora MySQL 版本 2）](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master)和[mysql.rds\$1reset\$1external\$1source（Aurora MySQL 版本 3）](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)。

   对于 `mysql_binary_log_file_name` 和 `mysql_binary_log_file_location`，使用您之前记下的**从二进制日志文件名还原**事件的位置。

   如果未加密 Aurora MySQL 数据库集群中的数据，则必须将 `ssl_encryption` 参数设置为 `0`。如果数据经过加密，则必须将 `ssl_encryption` 参数设置为 `1`。

   以下示例为含有加密数据的 Aurora MySQL 数据库集群运行该过程。

   ```
   CALL mysql.rds_set_external_master(
     'Externaldb.some.com',
     3306,
     'repl_user'@'mydomain.com',
     'password',
     'mysql-bin.000010',
     120,
     1);
   
   CALL mysql.rds_set_external_source(
     'Externaldb.some.com',
     3306,
     'repl_user'@'mydomain.com',
     'password',
     'mysql-bin.000010',
     120,
     1);
   ```

   此存储过程设置了参数，Aurora MySQL 数据库集群使用此类参数连接到外部 MySQL 数据库并读取其二进制日志。如果数据经过加密，则它还会将 SSL 证书颁发机构证书、客户端证书和客户端密钥下载到本地磁盘。

1. 通过运行 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 存储过程，启动二进制日志复制。

   ```
   CALL mysql.rds_start_replication;
   ```

1. 监控 Aurora MySQL 数据库集群落后于 MySQL 副本主数据库的程度。为了做到这一点，请连接到 Aurora MySQL 数据库集群并运行以下命令。

   ```
   Aurora MySQL version 2:
   SHOW SLAVE STATUS;
   
   Aurora MySQL version 3:
   SHOW REPLICA STATUS;
   ```

   在命令输出中，`Seconds Behind Master` 字段显示 Aurora MySQL 数据库集群落后于 MySQL 主实例的程度。如果该值为 `0`（零），则表示 Aurora MySQL 数据库集群与主实例保持一致，您可以转到下一步以停止复制。

1. 连接到 MySQL 副本主数据库并停止复制。为实现此目的，请运行 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程。

   ```
   CALL mysql.rds_stop_replication;
   ```

# 缩短物理迁移到 Amazon Aurora MySQL 的时间
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks"></a>

您可以进行以下数据库修改，以加快将数据库迁移到 Amazon Aurora MySQL 的过程。

**重要**  
请确保在生产数据库的副本而不是在生产数据库上执行这些更新。然后，您可以备份副本并将其还原到 Aurora MySQL 数据库集群，以避免生产数据库上产生任何服务中断。

## 不支持的表类型
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Tables"></a>

Aurora MySQL 仅支持用于数据库表的 InnoDB 引擎。如果您的数据库中有 MyISAM 表，则必须先转换这些表，然后才能迁移到 Aurora MySQL 中。迁移过程中，转换过程需要额外的空间以便将 MyISAM 转换为 InnoDB。

若要降低空间用尽的可能性或加快迁移过程，请先将所有 MyISAM 表转换为 InnoDB 表，然后再迁移这些表。生成的 InnoDB 表的大小与 Aurora MySQL 要求该表具有的大小相同。要将 MyISAM 表转换为 InnoDB 表，请运行以下命令：

```
ALTER TABLE schema.table_name engine=innodb, algorithm=copy;
```

Aurora MySQL 不支持压缩的表或页（即，使用 `ROW_FORMAT=COMPRESSED` 或 `COMPRESSION = {"zlib"|"lz4"}` 创建的表）。

为了避免用完空间或为了加速迁移过程，请通过将 `ROW_FORMAT` 设置为 `DEFAULT`、`COMPACT`、`DYNAMIC` 或 `REDUNDANT` 来扩展您的压缩表。对于压缩的页，请设置 `COMPRESSION="none"`。

有关更多信息，请参阅 MySQL 文档中的 [InnoDB 行格式](https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html)和 [InnoDB 表和页压缩](https://dev.mysql.com/doc/refman/8.0/en/innodb-compression.html)。

您可以在现有 MySQL 数据库实例上使用以下 SQL 脚本来列出数据库中属于 MyISAM 表或压缩表的表。

```
-- This script examines a MySQL database for conditions that block
-- migrating the database into Aurora MySQL.
-- It must be run from an account that has read permission for the
-- INFORMATION_SCHEMA database.

-- Verify that this is a supported version of MySQL.

select msg as `==> Checking current version of MySQL.`
from
  (
  select
    'This script should be run on MySQL version 5.6 or higher. ' +
    'Earlier versions are not supported.' as msg,
    cast(substring_index(version(), '.', 1) as unsigned) * 100 +
      cast(substring_index(substring_index(version(), '.', 2), '.', -1)
      as unsigned)
    as major_minor
  ) as T
where major_minor <> 506;


-- List MyISAM and compressed tables. Include the table size.

select concat(TABLE_SCHEMA, '.', TABLE_NAME) as `==> MyISAM or Compressed Tables`,
round(((data_length + index_length) / 1024 / 1024), 2) "Approx size (MB)"
from INFORMATION_SCHEMA.TABLES
where
  ENGINE <> 'InnoDB'
  and
  (
    -- User tables
    TABLE_SCHEMA not in ('mysql', 'performance_schema',
                         'information_schema')
    or
    -- Non-standard system tables
    (
      TABLE_SCHEMA = 'mysql' and TABLE_NAME not in
        (
          'columns_priv', 'db', 'event', 'func', 'general_log',
          'help_category', 'help_keyword', 'help_relation',
          'help_topic', 'host', 'ndb_binlog_index', 'plugin',
          'proc', 'procs_priv', 'proxies_priv', 'servers', 'slow_log',
          'tables_priv', 'time_zone', 'time_zone_leap_second',
          'time_zone_name', 'time_zone_transition',
          'time_zone_transition_type', 'user'
        )
    )
  )
  or
  (
    -- Compressed tables
       ROW_FORMAT = 'Compressed'
  );
```

## 具有不支持的权限的用户账户
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users"></a>

如果用户账户的权限不受 Aurora MySQL 支持，则在导入这些账户时将不包含这些不受支持的权限。有关支持的权限列表，请参阅[基于角色的权限模型](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)。

可以在源数据库上运行以下 SQL 查询，以列出具有不受支持的权限的用户账户。

```
SELECT
    user,
    host
FROM
    mysql.user
WHERE
    Shutdown_priv = 'y'
    OR File_priv = 'y'
    OR Super_priv = 'y'
    OR Create_tablespace_priv = 'y';
```

## Aurora MySQL 版本 3 中的动态权限
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic"></a>

不会导入动态权限。Aurora MySQL 版本 3 支持以下动态权限。

```
'APPLICATION_PASSWORD_ADMIN',
'CONNECTION_ADMIN',
'REPLICATION_APPLIER',
'ROLE_ADMIN',
'SESSION_VARIABLES_ADMIN',
'SET_USER_ID',
'XA_RECOVER_ADMIN'
```

以下示例脚本向 Aurora MySQL 数据库集群中的用户账户授予支持的动态权限。

```
-- This script finds the user accounts that have Aurora MySQL supported dynamic privileges 
-- and grants them to corresponding user accounts in the Aurora MySQL DB cluster.

/home/ec2-user/opt/mysql/8.0.26/bin/mysql -uusername -pxxxxx -P8026 -h127.0.0.1 -BNe "SELECT
  CONCAT('GRANT ', GRANTS, ' ON *.* TO ', GRANTEE ,';') AS grant_statement
  FROM (select GRANTEE, group_concat(privilege_type) AS GRANTS FROM information_schema.user_privileges 
      WHERE privilege_type IN (
        'APPLICATION_PASSWORD_ADMIN',
        'CONNECTION_ADMIN',
        'REPLICATION_APPLIER',
        'ROLE_ADMIN',
        'SESSION_VARIABLES_ADMIN',
        'SET_USER_ID',
        'XA_RECOVER_ADMIN')
      AND GRANTEE NOT IN (\"'mysql.session'@'localhost'\",\"'mysql.infoschema'@'localhost'\",\"'mysql.sys'@'localhost'\") GROUP BY GRANTEE)
      AS PRIVGRANTS; " | /home/ec2-user/opt/mysql/8.0.26/bin/mysql -u master_username -p master_password -h DB_cluster_endpoint
```

## 以 'rdsadmin'@'localhost' 作为定义程序的存储对象
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects"></a>

不会导入以 `'rdsadmin'@'localhost'` 作为定义程序的函数、过程、视图、事件和触发器。

您可以在源 MySQL 数据库上使用以下 SQL 脚本来列出具有不受支持的定义程序的存储对象。

```
-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer.

SELECT
    ROUTINE_SCHEMA,
    ROUTINE_NAME
FROM
    information_schema.routines
WHERE
    definer = 'rdsadmin@localhost';

-- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer.

SELECT
    TRIGGER_SCHEMA,
    TRIGGER_NAME,
    DEFINER
FROM
    information_schema.triggers
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists events with `rdsadmin`@`localhost` as the definer.

SELECT
    EVENT_SCHEMA,
    EVENT_NAME
FROM
    information_schema.events
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists views with `rdsadmin`@`localhost` as the definer.
SELECT
    TABLE_SCHEMA,
    TABLE_NAME
FROM
    information_schema.views
WHERE
    DEFINER = 'rdsadmin@localhost';
```

# 使用 mysqldump 从 MySQL 逻辑迁移到 Amazon Aurora MySQL
<a name="AuroraMySQL.Migrating.ExtMySQL.mysqldump"></a>

由于 Amazon Aurora MySQL 是与 MySQL 兼容的数据库，因此您可以使用 `mysqldump` 实用程序将数据从 MySQL 数据库复制，或使用 `mariadb-dump` 实用程序将数据从 MariaDB 数据库复制到现有 Aurora MySQL 数据库集群。

有关如何对大型 MySQL 或 MariaDB 数据库执行该操作的讨论，请参阅《Amazon Relational Database Service 用户指南》**中的以下主题：
+ MySQL – [将数据导入 Amazon RDS for MySQL 数据库并减少停机时间](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-importing-data-reduced-downtime.html)
+ MariaDB – [将数据导入 Amazon RDS for MariaDB 数据库并减少停机时间](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mariadb-importing-data-reduced-downtime.html)

对于具有较少量数据的 MySQL 或 MariaDB 数据库，请参阅《Amazon Relational Database Service 用户指南》**中的以下主题：
+ MySQL – [将数据从外部 MySQL 数据库导入到 Amazon RDS for MySQL 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-importing-data-external-database.html)
+ MariaDB – [将数据从外部 MariaDB 数据库导入到 Amazon RDS for MariaDB 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mariadb-importing-data-external-database.html)

# 将数据从 RDS for MySQL DB 数据库实例迁移到 Amazon Aurora MySQL 数据库集群
<a name="AuroraMySQL.Migrating.RDSMySQL"></a>

您可以将数据直接从 RDS for MySQL 数据库实例迁移（复制）到 Amazon Aurora MySQL 数据库集群。

**Topics**
+ [将 RDS for MySQL 快照迁移到 Aurora](AuroraMySQL.Migrating.RDSMySQL.Snapshot.md)
+ [使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Migrating.RDSMySQL.Replica.md)

**注意**  
由于 Amazon Aurora MySQL 与 MySQL 兼容，因此，您可以在 MySQL 数据库和 Amazon Aurora MySQL 数据库集群之间设置复制以迁移 MySQL 数据库中的数据。有关更多信息，请参阅 [使用 Amazon Aurora 进行复制](Aurora.Replication.md)。

# 将 RDS for MySQL 快照迁移到 Aurora
<a name="AuroraMySQL.Migrating.RDSMySQL.Snapshot"></a>

您可以迁移 RDS for MySQL 数据库实例的数据库快照来创建 Aurora MySQL 数据库集群。将使用原始 RDS for MySQL 数据库实例中的数据填充新的 Aurora MySQL 数据库集群。必须已从运行与 Aurora MySQL 兼容的 MySQL 版本的 Amazon RDS 数据库实例中创建数据库快照。

手动数据库快照和自动数据库快照都可以迁移。创建数据库集群后，您可创建可选 Aurora 副本。

**注意**  
您还可以通过创建源 RDS for MySQL 数据库实例的 Aurora 只读副本，将 RDS for MySQL 数据库实例迁移到 Aurora MySQL 数据库集群。有关更多信息，请参阅 [使用 Aurora 只读副本将数据从 RDS for MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群](AuroraMySQL.Migrating.RDSMySQL.Replica.md)。  
您无法从一些较早的 MySQL 8.0 版本（包括 8.0.11、8.0.13 和 8.0.15）迁移到 Aurora MySQL 版本 3.05 及更高版本。我们建议您在迁移之前先升级到 MySQL 版本 8.0.28。

您必须采取的常见步骤如下：

1. 确定要为 Aurora MySQL 数据库集群配置的空间量。有关更多信息，请参阅“[需要多少空间？](#AuroraMySQL.Migrating.RDSMySQL.Space)”

1. 使用控制台在 Amazon RDS MySQL 实例所在的AWS区域中创建快照。有关创建数据库快照的信息，请参阅[创建数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)。

1. 如果数据库快照不在数据库集群所在的AWS区域中，请使用 Amazon RDS 控制台将数据库快照复制到该AWS区域。有关复制数据库快照的信息，请参阅[复制数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)。

1. 使用控制台迁移数据库快照，并创建包含的数据库与原始 MySQL 数据库实例相同的 Aurora MySQL 数据库集群。

**警告**  
Amazon RDS 只允许每个AWS账户一次对应于每个AWS区域中的一个快照副本。

## 需要多少空间？
<a name="AuroraMySQL.Migrating.RDSMySQL.Space"></a>

将 MySQL 数据库实例的快照迁移到 Aurora MySQL 数据库集群时，Aurora 将先使用 Amazon Elastic Block Store (Amazon EBS) 卷设置快照中数据的格式，然后再迁移数据。在某些情况下，为迁移设置数据格式操作需要额外的空间。

MyISAM 之外的未压缩的表的大小可高达 16 TB。如果具有 MyISAM 表，则 Aurora 必须使用卷中的额外空间转换这些表以使其与 Aurora MySQL 兼容。如果有压缩表，则 Aurora 必须使用卷中的额外空间将这些表解压缩，然后再将它们存储在 Aurora 集群卷中。由于此额外的空间要求，您应确保从 MySQL 数据库实例迁移的 MyISAM 表和压缩表的大小不会超出 8 TB。

## 减少将数据迁移到 Amazon Aurora MySQL 中所需的空间量
<a name="AuroraMySQL.Migrating.RDSMySQL.PreImport"></a>

您可能需要先修改数据库架构，然后再将其迁移到 Amazon Aurora 中。这种修改在以下情况下会很有用：
+ 您需要加快迁移过程。
+ 您不确定需要配置的空间量。
+ 您已尝试迁移数据，但迁移因配置的空间不足而失败。

您可进行以下更改来改善将数据库迁移到 Amazon Aurora 的过程。

**重要**  
请务必对从生产数据库快照还原的新数据库实例而非生产实例执行这些更新。然后，您可以将新数据库实例快照中的数据迁移到 Aurora 数据库集群，以避免生产数据库发生任何服务中断。


| 表类型 | 限制或指南 | 
| --- | --- | 
|  MyISAM 表  |  Aurora MySQL 仅支持 InnoDB 表。如果您的数据库中有 MyISAM 表，则必须先转换这些表，然后才能将其迁移到 Aurora MySQL 中。迁移过程中，转换过程需要额外的空间以便将 MyISAM 转换为 InnoDB。 若要降低空间用尽的可能性或加快迁移过程，请先将所有 MyISAM 表转换为 InnoDB 表，然后再迁移这些表。生成的 InnoDB 表的大小与 Aurora MySQL 要求该表具有的大小相同。要将 MyISAM 表转换为 InnoDB 表，请运行以下命令： `alter table <schema>.<table_name> engine=innodb, algorithm=copy;`   | 
|  压缩表  |  Aurora MySQL 不支持压缩的表（即，使用 `ROW_FORMAT=COMPRESSED` 创建的表）。 为了避免用完空间或为了加速迁移过程，请通过将 `ROW_FORMAT` 设置为 `DEFAULT`、`COMPACT`、`DYNAMIC` 或 `REDUNDANT` 来扩展您的压缩表。有关更多信息，请参阅 MySQL 文档中的 [InnoDB 行格式](https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html)。  | 

您可以在现有 MySQL 数据库实例上使用以下 SQL 脚本来列出数据库中属于 MyISAM 表或压缩表的表。

```
-- This script examines a MySQL database for conditions that block
-- migrating the database into Amazon Aurora.
-- It needs to be run from an account that has read permission for the
-- INFORMATION_SCHEMA database.

-- Verify that this is a supported version of MySQL.

select msg as `==> Checking current version of MySQL.`
from
  (
  select
    'This script should be run on MySQL version 5.6 or higher. ' +
    'Earlier versions are not supported.' as msg,
    cast(substring_index(version(), '.', 1) as unsigned) * 100 +
      cast(substring_index(substring_index(version(), '.', 2), '.', -1)
      as unsigned)
    as major_minor
  ) as T
where major_minor <> 506;


-- List MyISAM and compressed tables. Include the table size.

select concat(TABLE_SCHEMA, '.', TABLE_NAME) as `==> MyISAM or Compressed Tables`,
round(((data_length + index_length) / 1024 / 1024), 2) "Approx size (MB)"
from INFORMATION_SCHEMA.TABLES
where
  ENGINE <> 'InnoDB'
  and
  (
    -- User tables
    TABLE_SCHEMA not in ('mysql', 'performance_schema',
                         'information_schema')
    or
    -- Non-standard system tables
    (
      TABLE_SCHEMA = 'mysql' and TABLE_NAME not in
        (
          'columns_priv', 'db', 'event', 'func', 'general_log',
          'help_category', 'help_keyword', 'help_relation',
          'help_topic', 'host', 'ndb_binlog_index', 'plugin',
          'proc', 'procs_priv', 'proxies_priv', 'servers', 'slow_log',
          'tables_priv', 'time_zone', 'time_zone_leap_second',
          'time_zone_name', 'time_zone_transition',
          'time_zone_transition_type', 'user'
        )
    )
  )
  or
  (
    -- Compressed tables
       ROW_FORMAT = 'Compressed'
  );
```

脚本会生成类似于以下示例的输出。该示例显示了两个必须从 MyISAM 转换为 InnoDB 的表。输出还包括每个表的相应大小（以 MB 为单位）。

```
+---------------------------------+------------------+
| ==> MyISAM or Compressed Tables | Approx size (MB) |
+---------------------------------+------------------+
| test.name_table                 |          2102.25 |
| test.my_table                   |            65.25 |
+---------------------------------+------------------+
2 rows in set (0.01 sec)
```

## 将 RDS for MySQL 数据库快照迁移到 Aurora MySQL 数据库集群
<a name="migrate-snapshot-ams-cluster"></a>

您可以使用 AWS 管理控制台或 AWS CLI 迁移 RDS for MySQL 数据库实例的数据库快照来创建 Aurora MySQL 数据库集群。将使用原始 RDS for MySQL 数据库实例中的数据填充新的 Aurora MySQL 数据库集群。有关创建数据库快照的信息，请参阅[创建数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)。

如果数据库快照不在要从中找到数据的 AWS 区域中，请将数据库快照复制到该 AWS 区域。有关复制数据库快照的信息，请参阅[复制数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)。

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

使用 AWS 管理控制台迁移数据库快照时，控制台将执行必要的操作来仅创建数据库集群。

您还可以选择使用 AWS KMS key 静态加密新的 Aurora MySQL DB 数据库集群。

**使用 AWS 管理控制台 迁移 MySQL 数据库快照**

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

1. 从 MySQL 数据库实例或快照中开始迁移：

   要从数据库实例中开始迁移，请执行以下操作：

   1. 在导航窗格中，选择 **Databases (数据库)**，然后选择 MySQL 数据库实例。

   1. 对于 **Actions (操作)**，选择 **Migrate latest snapshot (迁移最新快照)**。

   要从快照中开始迁移，请执行以下操作：

   1. 选择 **Snapshots**。

   1. 在 **Snapshots** 页面上，选择要迁移到 Aurora MySQL 数据库集群的快照。

   1. 选择**快照操作**，然后选择**迁移快照**。

   将显示**迁移数据库**页。

1. 在 **Migrate Database** 页面上设置以下值：
   + **迁移到数据库引擎**：选择 `aurora`。
   + **数据库引擎版本**：选择 Aurora MySQL 数据库集群的数据库引擎版本。
   + **数据库实例类**：选择具有数据库所需的存储和容量的数据库实例类，例如 `db.r3.large`。Aurora 集群卷随着数据库中数据量的增加自动增大。Aurora 集群卷可增大到最大大小 128 tebibytes (TiB)。因此，您只需选择满足当前存储要求的数据库实例类。有关更多信息，请参阅“[Amazon Aurora 存储概述](Aurora.Overview.StorageReliability.md#Aurora.Overview.Storage)”。
   + **DB Instance Identifier**（数据库实例标识符）：为数据库集群键入一个名称，该名称在您选择的 AWS 区域中对于您的账户是唯一的。此标识符将在数据库集群中实例的终端节点地址中使用。您可选择对该名称进行一些巧妙处理，例如将所选的 AWS 区域和数据库引擎包括在名称中（如 **aurora-cluster1**）。

     数据库实例标识符具有以下限制：
     + 它必须包含 1 到 63 个字母数字字符或连字符。
     + 它的第一个字符必须是字母。
     + 它不能以连字符结束或包含两个连续连字符。
     + 对于每个 AWS 区域的每个 AWS 账户的所有数据库实例必须是唯一的。
   + **Virtual Private Cloud (VPC)**：如果已具有 VPC，您可以选择 VPC 标识符（如 `vpc-a464d1c1`）以将该 VPC 用于 Aurora MySQL 数据库集群。有关创建 VPC 的信息，请参阅[教程：创建 VPC 以用于数据库集群（仅限 IPv4）](CHAP_Tutorials.WebServerDB.CreateVPC.md)。

     否则，可以通过选择 **Create a new VPC (新建 VPC)**，让 Aurora 为您创建 VPC。
   + **DB subnet group**（数据库子网组）：如果已具有子网组，您可以选择子网组标识符（如 `gs-subnet-group1`）以将该子网组用于 Aurora MySQL 数据库集群。

     否则，可以通过选择 **Create a new subnet group (新建子网组)**，让 Aurora 为您创建子网组。
   + **公有可访问性**：选择**否**以指定仅 VPC 中的资源可以访问数据库集群中的实例。选择 **Yes** 可指定数据库集群中的实例可以由公用网络上的资源访问。默认值为 **Yes**。
**注意**  
您的生产数据库集群可能不需要位于公有子网中，因为仅应用程序服务器将需要访问数据库集群。如果数据库集群不需要位于公有子网中，请将 **Publicly Accessible** 设置为 **No**。
   + **可用区**：选择可用区以托管 Aurora MySQL 数据库集群的主实例。要让 Aurora 选择可用区，请选择 **No Preference (无首选项)**。
   + **数据库端口**：键入在连接到 Aurora MySQL 数据库集群中的实例时使用的默认端口。默认为 `3306`。
**注意**  
您可能位于企业防火墙后面，该防火墙不允许访问默认端口 (例如，MySQL 默认端口 3306)。在此情况下，请提供企业防火墙允许的端口值。请记住此端口值，以便在稍后连接到 Aurora MySQL 数据库集群时使用。
   + **加密**：为要静态加密的新 Aurora MySQL 数据库集群选择**启用加密**。如果选择**启用加密**，您必须选择一个 KMS 密钥以作为 **AWS KMS key** 值。

     如果数据库快照未加密，请指定一个加密密钥来对数据库集群进行静态加密。

     如果数据库快照已加密，请指定一个加密密钥，以便使用指定的加密密钥对您的数据库集群进行静态加密。您可以指定数据库快照使用的加密密钥或其他密钥。您无法从加密的数据库快照创建未加密的数据库集群。
   + **自动次要版本升级**：该设置不适用于 Aurora MySQL 数据库集群。

     有关 Aurora MySQL 引擎更新的更多信息，请参阅[Amazon Aurora MySQL 的数据库引擎更新Amazon Aurora MySQL 的长期支持（LTS）版本和测试版](AuroraMySQL.Updates.md)。

1. 选择 **Migrate** 以迁移您的数据库快照。

1. 选择 **Instances**，然后选择箭头图标以显示数据库集群详细信息并监控迁移的进度。在详细信息页面上，您可以找到用于连接到数据库集群的主实例的集群终端节点。有关连接到 Aurora MySQL 数据库集群的更多信息，请参阅[连接到 Amazon Aurora 数据库集群](Aurora.Connecting.md)。

### AWS CLI
<a name="USER_ImportAuroraCluster.CLI"></a>

您可以使用包含以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-from-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-from-snapshot.html) 命令从 RDS for MySQL 数据库实例的数据库快照创建 Aurora 数据库集群：
+ `--db-cluster-identifier` – 要创建的数据库集群的名称。
+ `--engine aurora-mysql` – 适用于 MySQL 5.7 兼容或 8.0 兼容的数据库集群。
+ `--kms-key-id` – 用于选择性加密数据库集群的 AWS KMS key，具体取决于是否加密了数据库快照。
  + 如果数据库快照未加密，请指定一个加密密钥来对数据库集群进行静态加密。否则，不会对您的数据库集群进行加密。
  + 如果数据库快照已加密，请指定一个加密密钥，以便使用指定的加密密钥对您的数据库集群进行静态加密。否则，您的数据库集群将使用数据库快照的加密密钥进行静态加密。
**注意**  
您无法从加密的数据库快照创建未加密的数据库集群。
+ `--snapshot-identifier`：待迁移数据库快照的 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)。

在使用 `RestoreDBClusterFromSnapshot` 命令迁移数据库快照时，该命令将创建数据库集群和主实例。

在该示例中，您从将 ARN 设置为 *mydbsnapshotARN* 的数据库快照创建一个名为 *mydbcluster* 的 MySQL 5.7 兼容数据库集群。

对于 Linux、macOS 或 Unix：

```
aws rds restore-db-cluster-from-snapshot \
    --db-cluster-identifier mydbcluster \
    --snapshot-identifier mydbsnapshotARN \
    --engine aurora-mysql
```

对于：Windows

```
aws rds restore-db-cluster-from-snapshot ^
    --db-cluster-identifier mydbcluster ^
    --snapshot-identifier mydbsnapshotARN ^
    --engine aurora-mysql
```

在该示例中，您从将 ARN 设置为 *mydbsnapshotARN* 的数据库快照创建一个名为 *mydbcluster* 的 MySQL 5.7 兼容数据库集群。

对于 Linux、macOS 或 Unix：

```
aws rds restore-db-cluster-from-snapshot \
    --db-cluster-identifier mydbcluster \
    --snapshot-identifier mydbsnapshotARN \
    --engine aurora-mysql
```

对于：Windows

```
aws rds restore-db-cluster-from-snapshot ^
    --db-cluster-identifier mydbcluster ^
    --snapshot-identifier mydbsnapshotARN ^
    --engine aurora-mysql
```

# 使用 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
```