Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用复制导出 MySQL 数据

可以使用复制功能将数据从 MySQL 5.6 或更高版本的数据库实例导出到在 Amazon RDS 外部运行的 MySQL 实例。Amazon RDS 外部的 MySQL 实例可在您的数据中心内本地运行,也可在 Amazon EC2 实例上运行。该 MySQL 数据库实例必须运行 5.6.13 版或更高版本。Amazon RDS 以外的 MySQL 实例必须运行与 Amazon RDS 实例相同的版本或更高版本。

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

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

  1. 准备在 Amazon RDS 外部运行的 MySQL 实例。

  2. 将该 MySQL 数据库实例配置为复制源。

  3. 使用 mysqldump 将数据库从 Amazon RDS 实例转移到 Amazon RDS 外部的实例。

  4. 开始向在 Amazon RDS 外部运行的实例进行复制。

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

准备 Amazon RDS 外部的 MySQL 实例

安装 Amazon RDS 外部的 MySQL 实例。

以主用户身份连接实例,并创建所需的用户以支持可访问该实例的管理员、应用程序和服务。

按照 MySQL 文档中的说明,准备在 Amazon RDS 外部作为副本运行的 MySQL 实例。有关更多信息,请参阅设置复制从属进程配置

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

如果该只读副本在 Amazon VPC 中的 Amazon EC2 实例上运行,则在 VPC 安全组中指定出口规则。如果该只读副本在不在 VPC 中的 Amazon EC2 实例上运行,请在 Amazon EC2 安全组中指定出口规则。如果该只读副本安装在本地,请在防火墙中指定出口规则。

如果该只读副本在 VPC 中运行,则除了安全组出口规则之外,还要配置 VPC ACL 规则。有关 Amazon VPC 网络 ACL 的更多信息,请参阅网络 ACL

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

  • ACL 出口规则:允许出站 TCP 流量流向源 MySQL 数据库实例的端口和 IP 地址。

准备复制源

准备 MySQL 数据库实例,使其成为复制源。

确保设置复制时您的客户端计算机有足够的磁盘空间保存二进制日志。

按照创建用于复制的用户的说明创建复制账户。

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

如果 Amazon RDS 实例在 VPC 中运行,请在 VPC 安全组中指定传入规则。如果 Amazon RDS 实例不在 VPC 中运行,请在数据库安全组中指定传入规则。

如果 Amazon RDS 实例在 VPC 中运行,则除了安全组传入规则外,还要配置 VPC ACL 规则。有关 Amazon VPC 网络 ACL 的更多信息,请参阅网络 ACL

  • ACL 入口规则:允许从外部 MySQL 只读副本的 IP 地址通过 TCP 连接到该 Amazon RDS 实例使用的端口。

  • ACL 出口规则:允许从端口 1024-65535 通过 TCP 连接到外部 MySQL 只读副本的 IP 地址。

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

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

为了进一步确保不会清除源实例的二进制日志,请通过源实例创建 Amazon RDS 只读副本。有关更多信息,请参阅创建只读副本。在创建 Amazon RDS 只读副本后,调用 mysql.rds_stop_replication 存储过程以停止复制过程。源实例不再会清除其二进制日志文件,因此,可在复制进程中使用这些日志文件。

复制数据库

对 RDS 只读副本运行 MySQL SHOW SLAVE STATUS 语句,并记下以下项的值:

  • master_host

  • master_port

  • master_log_file

  • exec_master_log_pos

使用 mysqldump 实用工具创建快照,此过程将数据从 Amazon RDS 复制到本地客户端计算机。然后运行另一实用工具,将数据加载到在 RDS 以外运行的 MySQL 实例中。确保您的客户端计算机有足够的空间,可容纳要复制的数据库中的 mysqldump 文件。为大量数据库完成此过程可能需要数小时的时间。按照使用 mysqldump 创建转储快照的说明操作。

下例展示如何在客户端上运行 mysqldump,然后将转储通过管道发送到 mysql 客户端实用程序,后者将数据加载到外部 MySQL 实例中。

针对 Linux、OS X 或 Unix:

mysqldump -h RDS instance endpoint \ -u user \ -p password \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 \ --compress \ --compact | mysql \ -h MySQL host \ -u master user \ -p password \ --port 3306

对于 Windows:

mysqldump -h RDS instance endpoint ^ -u user ^ -p password ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --databases database database2 ^ --compress ^ --compact | mysql ^ -h MySQL host ^ -u master user ^ -p password ^ --port 3306

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

针对 Linux、OS X 或 Unix:

mysqldump -h RDS instance endpoint \ -u user \ -p password \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 > path/rds-dump.sql

对于 Windows:

mysqldump -h RDS instance endpoint ^ -u user ^ -p password ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --databases database database2 > path\rds-dump.sql

完成导出

加载 mysqldump 文件以在 Amazon RDS 外部运行的 MySQL 实例上创建数据库后,从源 MySQL 数据库实例开始复制,以导出在停止从 Amazon RDS 只读副本进行复制后发生的所有源更改。

使用 MySQL CHANGE MASTER 语句配置外部 MySQL 实例。指定用户授权的 REPLICATION SLAVE 权限的 ID 和密码。指定您从对 RDS 只读副本运行的 Mysql SHOW SLAVE STATUS 语句获得的 master_hostmaster_portrelay_master_log_fileexec_master_log_pos 值。有关更多信息,请参阅在从属进程上设置主配置

使用 MySQL START SLAVE 命令启动从源 MySQL 数据库实例和 MySQL 副本的复制。

在 Amazon RDS 实例上运行 MySQL SHOW SLAVE STATUS 命令,验证它是否作为只读副本运行。有关解析结果的更多信息,请参阅 SHOW SLAVE STATUS 语法

在 Amazon RDS 源上执行 MySQL 实例的复制后,使用 MySQL STOP SLAVE 命令终止从源 MySQL 数据库实例的复制。

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