使用复制从 MySQL 数据库实例中导出数据 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用复制从 MySQL 数据库实例中导出数据

可以使用复制功能,将数据从 RDS for MySQL 数据库实例导出到在 Amazon RDS 外部运行的 MySQL 实例。在这种情况下,MySQL 数据库实例是源 MySQL 数据库实例,而在 Amazon RDS 外部运行的 MySQL 实例则是外部 MySQL 数据库

外部 MySQL 数据库可以在数据中心本地运行,也可以在 Amazon EC2 实例上运行。外部 MySQL 数据库必须运行与源 MySQL 数据库实例相同的版本或更高版本。

只有在从源 MySQL 数据库实例导出数据库期间,才支持复制到外部 MySQL 数据库。导出数据后,应终止复制,而应用程序可开始访问该外部 MySQL 实例。

下面列表显示了需要采取的步骤。每个步骤在后续的几节中有详述。

  1. 准备外部 MySQL 数据库实例。

  2. 准备用于复制的源 MySQL 数据库实例。

  3. 使用 mysqldump 实用程序将数据库从源 MySQL 数据库实例传输到外部 MySQL 数据库。

  4. 开始复制到外部 MySQL 数据库。

  5. 导出完毕后,停止复制。

准备外部 MySQL 数据库

执行以下步骤来准备外部 MySQL 数据库。

准备外部 MySQL 数据库
  1. 安装外部 MySQL 数据库。

  2. 以主用户身份连接到外部 MySQL 数据库。然后创建支持访问数据库的管理员、应用程序和服务所需的用户。

  3. 按照 MySQL 文档中的说明以副本的形式准备外部 MySQL 数据库。有关更多信息,请参阅 MySQL 文档中的 Setting the Replica Configuration

  4. 配置一条传出规则,使外部 MySQL 数据库在导出过程中作为只读副本运行。该传出规则将允许外部 MySQL 数据库在复制期间连接到源 MySQL 数据库实例。指定传出规则以允许通过传输控制协议 (TCP) 连接到源 MySQL 数据库实例的端口和 IP 地址。

    为您的环境指定适当的传出规则:

    • 如果外部 MySQL 数据库在基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 中的 Amazon EC2 实例中运行,请在 VPC 安全组中指定传出规则。有关更多信息,请参阅 使用安全组控制访问权限

    • 如果外部 MySQL 数据库安装在本地,请在防火墙中指定传出规则。

  5. 如果外部 MySQL 数据库在 VPC 中运行,则除了安全组传出规则外,还应配置 VPC 访问控制列表 (ACL) 规则:

    • 配置允许将 TCP 流量从源 MySQL 数据库实例的 IP 地址传入到端口 1024–65535 的 ACL 传入规则。

    • 配置允许将 TCP 流量传出到源 MySQL 数据库实例的端口 和 IP 地址的 ACL 传出规则。

    有关 Amazon VPC 网络 ACL 的更多信息,请参阅《Amazon VPC 用户指南》中的网络 ACL

  6. (可选)将 max_allowed_packet 参数设置为最大大小,以避免复制错误。建议使用此设置。

准备源 MySQL 数据库实例

执行以下步骤以复制源的形式准备源 MySQL 数据库实例。

准备源 MySQL 数据库实例
  1. 确保设置复制时您的客户端计算机有足够的磁盘空间来保存二进制日志。

  2. 连接到源 MySQL 数据库实例,并按照 MySQL 文档中 Creating a User for Replication 的说明创建复制账户。

  3. 在运行源 MySQL 数据库实例的系统上配置传入规则,以允许外部 MySQL 数据库在复制期间连接。指定一条传入规则,以允许从外部 MySQL 数据库的 IP 地址通过 TCP 连接到源 MySQL 数据库实例使用的端口。

  4. 指定传出规则:

  5. 如果源 MySQL 数据库实例在 VPC 中运行,则除了安全组传入规则外,还要配置 VPC ACL 规则。

    • 配置 ACL 传入规则,以允许从外部 MySQL 数据库的 IP 地址通过 TCP 连接到 Amazon RDS 实例使用的端口。

    • 配置 ACL 出口规则,以允许从端口 1024-65535 通过 TCP 连接到外部 MySQL 数据库的 IP 地址。

    有关 Amazon VPC 网络 ACL 的更多信息,请参阅《Amazon VPC 用户指南》中的网络 ACL

  6. 确保设置的备份保留期足够长,以便在导出期间不会清除任何二进制日志。如果在导出完成前清除了所有日志,您必须从头重新启动复制进程。有关设置备份保留期的更多信息,请参阅 备份简介

  7. 使用 mysql.rds_set_configuration 存储过程将二进制日志文件保留期设置得足够长,以便在导出期间不会清除二进制日志文件。有关更多信息,请参阅 访问 MySQL 二进制日志

  8. 从源 MySQL 数据库实例创建 Amazon RDS 只读副本,以进一步确保不会清除源 MySQL 数据库实例的二进制日志文件。有关更多信息,请参阅 创建只读副本

  9. 在创建 Amazon RDS 只读副本后,调用 mysql.rds_stop_replication 存储过程以停止复制过程。源 MySQL 数据库实例不会再清除其二进制日志文件,以便这些文件可用于复制过程。

  10. (可选)将 max_allowed_packetslave_max_allowed_packet 参数都设置为最大大小,以避免复制错误。两个参数的最大大小为 1 GB。建议对两个参数都使用此设置。有关设置参数的信息,请参阅 在 Amazon RDS 中修改数据库参数组中的参数

复制数据库

执行以下步骤以复制数据库。

复制数据库
  1. 连接到源 MySQL 数据库实例的 RDS 只读副本,然后运行 MySQL SHOW REPLICA STATUS\G 语句。请记录下以下值:

    • Master_Host

    • Master_Port

    • Master_Log_File

    • Exec_Master_Log_Pos

    注意

    以前的 MySQL 版本使用的是 SHOW SLAVE STATUS,而不是 SHOW REPLICA STATUS。如果您使用的 MySQL 版本低于 8.0.23,那么请使用 SHOW SLAVE STATUS

  2. 使用 mysqldump 实用程序创建快照,此过程会将数据从 Amazon RDS 复制到本地客户端计算机。确保您的客户端计算机有足够的空间容纳要复制的数据库中的 mysqldump 文件。为大量数据库完成此过程可能需要数小时的时间。按照 MySQL 文档中 Creating a Data Snapshot Using mysqldump 的说明进行操作。

    以下示例在客户端上运行 mysqldump,并将转储写入文件。

    对于 Linux、macOS 或 Unix:

    mysqldump -h source_MySQL_DB_instance_endpoint \ -u user \ -ppassword \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 > path/rds-dump.sql

    对于 Windows:

    mysqldump -h source_MySQL_DB_instance_endpoint ^ -u user ^ -ppassword ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --databases database database2 > path\rds-dump.sql

    您可以将备份文件加载到外部 MySQL 数据库中。有关更多信息,请参阅 MySQL 文档中的重新加载 SQL 格式备份。您可以运行另一个实用程序以将数据加载到外部 MySQL 数据库中。

完成导出

执行以下步骤以完成导出。

完成导出
  1. 使用 MySQL CHANGE MASTER 语句配置外部 MySQL 数据库。指定授予 REPLICATION SLAVE 权限的用户的 ID 和密码。指定您对 RDS 只读副本运行的 MySQL SHOW REPLICA STATUS\G 语句所返回的 Master_HostMaster_PortRelay_Master_Log_FileExec_Master_Log_Pos 值。有关更多信息,请参阅 MySQL 文档中的 CHANGE MASTER TO Statement

    注意

    以前的 MySQL 版本使用的是 SHOW SLAVE STATUS,而不是 SHOW REPLICA STATUS。如果您使用的 MySQL 版本低于 8.0.23,那么请使用 SHOW SLAVE STATUS

  2. 使用 MySQL START REPLICA 命令启动从源 MySQL 数据库实例到外部 MySQL 数据库的复制。

    执行此操作将启动从源 MySQL 数据库实例进行复制的过程,并会导出在停止从 Amazon RDS 只读副本进行复制后发生的所有源更改。

    注意

    以前的 MySQL 版本使用的是 START SLAVE,而不是 START REPLICA。如果您使用的 MySQL 版本低于 8.0.23,那么请使用 START SLAVE

  3. 对外部 MySQL 数据库运行 MySQL SHOW REPLICA STATUS\G 命令,以验证它是否作为只读副本运行。有关解释结果的更多信息,请参阅 MySQL 文档中的 SHOW SLAVE | REPLICA STATUS Statement

  4. 在外部 MySQL 数据库上的复制跟上源 MySQL 数据库实例后,使用 MySQL STOP REPLICA 命令停止从源 MySQL 数据库实例的复制。

    注意

    以前的 MySQL 版本使用的是 STOP SLAVE,而不是 STOP REPLICA。如果您使用的 MySQL 版本低于 8.0.23,那么请使用 STOP SLAVE

  5. 在 Amazon RDS 只读副本上,调用 mysql.rds_start_replication 存储过程。这样,Amazon RDS 就能开始从源 MySQL 数据库实例清除二进制日志文件。