mysqldump 和 mysqlpump - AWS 规范指引

mysqldump 和 mysqlpump

mysqldumpmysqlpump 是 MySQL 的原生数据库备份工具。MariaDB 支持 mysqldump 但不支持 mysqlpump。这两个工具都创建逻辑备份,并且是 MySQL 客户端程序的一部分。mysqldump 支持单线程处理。mysqlpump 支持并行处理数据库和数据库内的对象,以加快转储过程。它是在 MySQL 5.7.8 版中引入的。mysqlpump 在 MySQL 8.4 版中已删除。

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

迁移 mysqldump 或 mysqlpump 备份文件并将其恢复到 AWS 数据库实例的示意图。

以下是使用 mysqldump 或 mysqlpump 将数据库迁移到 AWS 架构的步骤:

  1. 在本地服务器上安装 MySQL Shell。有关说明,请参阅 MySQL 文档中的 Installing MySQL Shell。这将同时安装 mysqldump 和 mysqlpump。

  2. 使用 mysqldump 或 mysqlpump 创建源本地数据库的备份。有关说明,请参阅 MySQL 文档中的 mysqldumpmysqlpump,或者参阅 MariaDB 文档中的 Making Backups with mysqldump。有关调用 MySQL 程序和指定选项的更多信息,请参阅 Using MySQL programs

  3. 使用以下方法之一,将备份文件移到 AWS 架构中的 EC2 实例:

    方法 3A:将 Amazon FSxAmazon Elastic File System(Amazon EFS)文件系统挂载到运行数据库实例的本地服务器。您可以使用 AWS Direct Connect 或 Site-to-Site VPN 来建立连接。您可以直接将数据库备份到已挂载的文件共享,也可以分两步执行备份,方法是将数据库备份到本地文件系统,然后将其上传到已挂载的 FSx 或 EFS 卷。接下来,将 Amazon FSx 或 Amazon EFS 文件系统(也挂载在本地服务器上)挂载到 EC2 实例上。

    方法 3B:使用 AWS CLI、AWS SDK 或 Amazon S3 REST API 将备份文件从本地服务器直接移到 S3 存储桶。如果目标 S3 存储桶位于距离数据中心较远的 AWS 区域,则可以使用 Amazon S3 Transfer Acceleration 更快地传输文件。使用 s3fs-fuse 文件系统在 EC2 实例上挂载 S3 存储桶。

    方法 3C:在本地数据中心安装 AWS DataSync 代理,然后使用 AWS DataSync 将备份文件移到 Amazon S3 存储桶。使用 s3fs-fuse 文件系统在 EC2 实例上挂载 S3 存储桶。

    注意

    您也可以使用 Amazon S3 文件网关将大型数据库备份文件传输到 AWS 架构中的 S3 存储桶。有关更多信息,请参阅本指南中的使用 Amazon S3 文件网关传输备份文件

  4. 使用原生恢复方法恢复目标数据库上的备份。有关说明,请参阅 MySQL 文档中的 Reloading SQL-Format Backups,或参阅 MariaDB 文档中的 Restoring Data from Dump Files

  5. (可选)您可以在源数据库和目标数据库实例之间设置复制。您可以使用二进制日志(binlog)复制来减少停机时间。有关更多信息,请参阅下列内容:

优点

  • mysqldump 和 mysqlpump 包含在 MySQL Server 安装中

  • 这些工具生成的备份文件采用更易读的格式。

  • 在恢复备份文件之前,您可以使用标准文本编辑器修改生成的.sql 文件。

  • 您可以备份特定的表、数据库,甚至是特定的数据选择。

  • mysqldump 和 mysqlpump 是独立于机器架构的。

限制

  • mysqldump 是一个单线程备份过程。对于小型数据库,备份性能良好,但当备份大小超过 10 GB 时,效率可能会降低。

  • 逻辑格式的备份文件很大,尤其是在另存为文本时,而且创建和恢复速度通常很慢。

  • 数据恢复可能很慢,因为在目标数据库实例中重新应用 SQL 语句涉及大量的磁盘 I/O 和 CPU 处理,用于插入、创建索引和强制执行引用完整性约束。

  • 5.7.8 之前的 MySQL 版本或 8.4 版及更高版本不支持 mysqlpump 实用程序。

  • 默认情况下,mysqlpump 不备份系统数据库,例如 performance_schemasys。要备份部分系统数据库,请在命令行中对其进行显式命名。

  • mysqldump 不备份 InnoDB CREATE TABLESPACE 语句。

注意

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

最佳实践

  • 恢复数据库备份时,在目标数据库的会话级别禁用密钥检查,例如 FOREIGN_KEY_CHECKS。这会提高恢复速度。

  • 确保数据库用户具有足够的权限来创建和恢复备份。