

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# mysqldump 和 mysqlpump
<a name="mysqldump-and-mysqlpump"></a>

[mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 和 [mysqlpump](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html) 是 MySQL 的原生数据库备份工具。MariaDB 支持 mysqldump 但不支持 mysqlpump。这两个工具都创建逻辑备份，并且是 MySQL 客户端程序的一部分。mysqldump 支持单线程处理。mysqlpump 支持并行处理数据库和数据库内的对象，以加快转储过程。它是在 MySQL 5.7.8 版中引入的。mysqlpump 在 MySQL 8.4 版中已删除。

下图显示了使用 mysqldump 或 mysqlpump 备份文件迁移数据库所涉及的概要步骤。



![\[迁移 mysqldump 或 mysqlpump 备份文件并将其还原到数据库实例的示意图。 AWS\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-large-mysql-mariadb-databases/images/mysqldump-mysqlpump-migration-aws.png)


以下是使用 mysqldump 或 mysqlpump 将数据库迁移到 AWS 云的步骤：

1. 在本地服务器上安装 MySQL Shell。有关说明，请参阅 MySQL 文档中的 [Installing MySQL Shell](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-install-linux-quick.html)。这将同时安装 mysqldump 和 mysqlpump。

1. 使用 mysqldump 或 mysqlpump 创建源本地数据库的备份。有关说明，请参阅 MySQL 文档中的 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 和 [mysqlpump](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html)，或者参阅 MariaDB 文档中的 [Making Backups with mysqldump](https://mariadb.com/kb/en/making-backups-with-mysqldump/)。有关调用 MySQL 程序和指定选项的更多信息，请参阅 [Using MySQL programs](https://dev.mysql.com/doc/refman/8.0/en/programs-using.html)。

1. 使用以下方法之一将备份文件移动到中的 EC2 实例： AWS 云 

   **方法** **3A** — 将[亚马逊 FSx或亚马逊](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/using-file-shares.html)[弹性文件系统 (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html) 文件系统挂载到运行数据库实例的本地服务器。您可以使用 AWS Direct Connect 或 Site-to-Site VPN 来建立连接。您可以直接将数据库备份到已挂载的文件共享，也可以分两步执行备份，方法是将数据库备份到本地文件系统，然后将其上传到已挂载的 FSx 或 EFS 卷。接下来，将 Amazon FSx 或 Amazon EFS 文件系统（也挂载在本地服务器上）挂载到 EC2 实例上。

   **方法 3B** — 使用 AWS CLI、 AWS 软件开发工具包或 Amazon S3 REST API 将备份文件从本地服务器直接移动到 S3 存储桶。如果目标 S3 存储桶位于距离数据中心较远的地方 AWS 区域 ，则可以使用 [Amazon S3 Transfer Accel](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html) eration 更快地传输文件。使用 [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse) 文件系统在 EC2 实例上挂载 S3 存储桶。

   **方法 3C**：在本地数据中心安装 AWS DataSync 代理，然后使用 [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html) 将备份文件移到 Amazon S3 存储桶。使用 [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse) 文件系统在 EC2 实例上挂载 S3 存储桶。
**注意**  
您也可以使用 Amazon S3 文件网关将大型数据库备份文件传输到 AWS 云中的 S3 存储桶。有关更多信息，请参阅本指南中的[使用 Amazon S3 文件网关传输备份文件](amazon-s3-file-gateway.md)。

1. 使用原生恢复方法恢复目标数据库上的备份。有关说明，请参阅 MySQL 文档中的 [Reloading SQL-Format Backups](https://dev.mysql.com/doc/refman/8.0/en/reloading-sql-format-dumps.html)，或参阅 MariaDB 文档中的 [Restoring Data from Dump Files](https://mariadb.com/kb/en/restoring-data-from-dump-files/)。

1. （可选）您可以在源数据库和目标数据库实例之间设置复制。您可以使用二进制日志（binlog）复制来减少停机时间。有关更多信息，请参阅下列内容：
   + MySQL 文档中的 [Setting the replication source configuration](https://dev.mysql.com/doc/refman/5.7/en/replication-howto-masterbaseconfig.html)
   + 对于 Amazon Aurora，请参阅以下内容：
     + Aurora 文档中的[通过复制同步 Amazon Aurora MySQL 数据库集群和 MySQL 数据库](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync)
     + Aurora 文档中的[在 Amazon Aurora 中使用二进制日志复制](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.html)
   + 对于 Amazon RDS，请参阅以下内容：
     + Amazon RDS 文档中的[使用 MySQL 复制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.html)
     + Amazon RDS 文档中的[使用 MariaDB 复制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MariaDB.Replication.html)
   + 对于 Amazon EC2，请参阅以下内容：
     + MySQL 文档中的[设置二进制日志文件基于位置的复制](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto.html)
     + MySQL 文档中的[设置副本](https://dev.mysql.com/doc/refman/8.0/en/replication-setup-replicas.html)
     + MariaDB 文档中的[设置复制](https://mariadb.com/kb/en/setting-up-replication/)

## 优点
<a name="advantages-mysqlpump-mysqldump"></a>
+ mysqldump 和 mysqlpump 包含在 MySQL Server 安装中
+ 这些工具生成的备份文件采用更易读的格式。
+ 在恢复备份文件之前，您可以使用标准文本编辑器修改生成的.sql 文件。
+ 您可以备份特定的表、数据库，甚至是特定的数据选择。
+ mysqldump 和 mysqlpump 是独立于机器架构的。

## 限制
<a name="limitations-mysqlpump-mysqldump"></a>
+ mysqldump 是一个单线程备份过程。对于小型数据库，备份性能良好，但当备份大小超过 10 GB 时，效率可能会降低。
+ 逻辑格式的备份文件很大，尤其是在另存为文本时，而且创建和恢复速度通常很慢。
+ 数据恢复速度可能很慢，因为在目标数据库实例中重新应用 SQL 语句需要大量的磁盘 I/O 和 CPU 处理插入、创建索引和强制执行引用完整性约束。
+ 5.7.8 之前的 MySQL 版本或 8.4 版及更高版本不支持 mysqlpump 实用程序。
+ 默认情况下，mysqlpump 不备份系统数据库，例如 `performance_schema` 或 `sys`。要备份部分系统数据库，请在命令行中对其进行显式命名。
+ mysqldump 不备份 InnoDB `CREATE TABLESPACE` 语句。

**注意**  
只有在将 MySQL 或 MariaDB 数据库备份恢复到 EC2 实例时，CREATE TABLESPACE 语句和系统数据库的备份才有用。这些备份不用于 Amazon RDS 或 Aurora。

## 最佳实践
<a name="best-practices-mysqlpump-mysqldump"></a>
+ 恢复数据库备份时，在目标数据库的会话级别禁用密钥检查，例如 `FOREIGN_KEY_CHECKS`。这会提高恢复速度。
+ 确保数据库用户具有足够的[权限](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html)来创建和恢复备份。