MyDumper - AWS 规范性指导

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

MyDumper

MyDumper(GitHub) 是一个开源的逻辑迁移工具,由两个实用程序组成:

  • mydumper 导出了 MySQL 数据库的一致备份。它支持使用多个并行线程备份数据库,每个可用 CPU 内核最多一个线程。

  • myloader 读取 mydumper 创建的备份文件,连接到目标数据库实例,然后恢复数据库。

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

迁移 mydumper 备份文件并使用 myloader 将其还原到数据库实例的 AWS 示意图。

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

  1. 安装 mydumper 和 myloader。有关说明,请参阅如何安装 mydumper/myloader ()。GitHub

  2. 使用 mydumper 创建源 MySQL 或 MariaDB 数据库的备份。有关说明,请参阅如何使用 MyDumper

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

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

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

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

    注意

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

  4. 使用 myloader 恢复目标数据库实例上的备份。有关说明,请参阅 myloader 用法 (GitHub)。

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

优点

  • MyDumper 通过使用多线程支持并行性,这可以提高备份和恢复操作的速度。

  • MyDumper 避免了昂贵的字符集转换例程,这有助于确保代码的高效。

  • MyDumper 通过为表和元数据转储单独的文件来简化数据查看和解析。

  • MyDumper 维护所有线程的快照,并提供主日志和辅助日志的准确位置。

  • 您可以使用兼容 Perl 的正则表达式 (PCRE) 来指定是包含还是排除表或数据库。

限制

  • 如果您的数据转换过程需要采用平面格式而不是 SQL 格式的中间转储文件,则可以选择其他工具。

  • myloader 不会自动导入数据库用户帐户。如果您要将备份还原到 Amazon RDS 或 Aurora,请重新创建具有所需权限的用户。有关更多信息,请参阅 Amazon RDS 文档中的主用户账户权限。如果您要将备份恢复到 Amazon EC2 数据库实例,则可以手动导出源数据库用户账户并将其导入 EC2 实例。

最佳实践

  • 将 mydumper 配置为将每个表划分为多个段,例如每个段中的 10,000 行,并将每个段写入单独的文件中。这使得以后可以并行导入数据。

  • 如果您使用的是InnoDB引擎,请使用该--trx-consistency-only选项来最大限度地减少锁定。

  • 使用 mydumper 导出数据库可能会变得需要大量读取,并且该过程可能会影响生产数据库的整体性能。如果您有副本数据库实例,请从该副本运行导出过程。在从副本运行导出操作之前,请停止复制 SQL 线程。这有助于更快地运行导出过程。

  • 不要在工作高峰时段导出数据库。避免高峰时段可以在数据库导出期间稳定主生产数据库的性能。