

# 将数据迁移到 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。