

# 将数据从外部 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)