

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

# MyDumper
<a name="mydumper"></a>

[MyDumper](https://github.com/mydumper/mydumper#what-is-mydumper)(GitHub) 是一个开源的逻辑迁移工具，由两个实用程序组成：
+ MyDumper 导出 MySQL 数据库的一致备份。它支持使用多个并行线程备份数据库，每个可用 CPU 核心最多一个线程。
+ myloader 读取由创建的备份文件 MyDumper，连接到目标数据库实例，然后恢复数据库。

下图显示了使用 MyDumper 备份文件迁移数据库所涉及的高级步骤。此架构图包括三个选项，用于将备份文件从本地数据中心迁移到 AWS Cloud中的 EC2 实例。



![迁移 MyDumper 备份文件并使用 myloader 在 AWS 数据库实例上将其还原的示意图。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-large-mysql-mariadb-databases/images/mydumper-myloader-migration-aws.png)


以下是使用将数据库迁移 MyDumper 到的步骤 AWS Cloud：

1. 安装 MyDumper 和我的加载器。有关说明，请参阅[如何安装 mydumper/myloader](https://github.com/mydumper/mydumper#how-to-install-mydumpermyloader) ()。GitHub

1.  MyDumper 用于创建源 MySQL 或 MariaDB 数据库的备份。有关说明，请参阅[如何使用 MyDumper](https://github.com/mydumper/mydumper#how-to-use-mydumper)。

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

   **方法 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 Cloud中的 S3 存储桶。有关更多信息，请参阅本指南中的[使用 Amazon S3 文件网关传输备份文件](amazon-s3-file-gateway.md)。

1. 使用 myloader 恢复目标数据库实例上的备份。有关说明，请参阅 [myloader 用法](https://github.com/mydumper/mydumper_docs/blob/0e5cd71a5549c8a5de0105adf4d5f95953eadb67/myloader_usage.rst) (GitHub)。

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-mydumper"></a>
+ MyDumper 通过使用多线程支持并行性，这可以提高备份和恢复操作的速度。
+ MyDumper 避免了昂贵的字符集转换例程，这有助于确保代码的高效。
+ MyDumper 通过为表和元数据转储单独的文件来简化数据查看和解析。
+ MyDumper 维护所有线程的快照，并提供主日志和辅助日志的准确位置。
+ 您可以使用 Perl 兼容正则表达式（PCRE），来指定是包含还是排除表或数据库。

## 限制
<a name="limitations-mydumper"></a>
+ 如果您的数据转换过程需要采用平面格式而不是 SQL 格式的中间转储文件，则可以选择其他工具。
+ myloader 不会自动导入数据库用户账户。如果您要将备份恢复到 Amazon RDS 或 Aurora，请重新创建具有所需权限的用户。有关更多信息，请参阅 Amazon RDS 文档中的[主用户账户权限](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.MasterAccounts.html)。如果您要将备份恢复到 Amazon EC2 数据库实例，则可以手动导出源数据库用户账户并将其导入 EC2 实例。

## 最佳实践
<a name="best-practices-mydumper"></a>
+ 配置 MyDumper 为将每个表划分为多个段，例如每个段中的 10,000 行，并将每个段写入单独的文件中。这样，以后就可以并行导入数据。
+ 如果您使用的是 InnoDB 引擎，请使用 `--trx-consistency-only` 选项来最大限度地减少锁定。
+ 使用导 MyDumper 出数据库可能会成为读取密集型，并且该过程可能会影响生产数据库的整体性能。如果您有副本数据库实例，请从该副本运行导出过程。在从副本运行导出之前，停止复制 SQL 线程。这有助于更快地运行导出过程。
+ 不要在工作高峰时段导出数据库。避免高峰时段可以在数据库导出期间稳定主生产数据库的性能。
+ Amazon RDS for MySQL 不支持 `keyring_aws` 插件。有关更多信息，请参阅[已知问题和限制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.KnownIssuesAndLimitations.html#MySQL.Concepts.Limits.KeyRing)。要将本地加密表迁移到 Amazon RDS 实例，在备份脚本中，您需要从 `CREATE TABLE` 语法中删除 `ENCRYPTION` 或 `DEFAULT ENCRYPTION`。对于静态加密，您可以使用 AWS Key Management Service （AWS KMS）密钥。有关更多信息，请参阅[加密 Amazon RDS 资源](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)。