如何使用二进制日志将 Amazon RDS for MySQL 活动数据库实例复制到本地备用实例?

上次更新时间:2020 年 8 月 14 日

如何使用二进制日志,将 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库实例复制到外部本地环境?

简短描述

要将数据从 Amazon RDS for MySQL 迁移到本地数据库服务器,请在 AWS 上创建只读副本,然后将复制目标从 Amazon RDS MySQL 只读副本切换到本地服务器。

如果您使用基于 GTID 的复制,请参阅使用外部主实例配置基于 GTID 的复制

解决方法

1.    确认已在您想要复制的数据库实例上启用自动备份。在本例中,该数据库实例称为 RDS-active

注意:最短备份保留期为一天。

2.    使用相同配置创建数据库实例的只读副本。在本例中,该副本为 RDS-standby

3.    登录 RDS-standby 数据库实例,然后确认该副本与 RDS-active 同步:

mysql> show slave status \G

注意:seconds_behind_master 必须为 0,这表明没有副本延迟。

4.    在 RDS-standby停止复制

mysql> call mysql.rds_stop_replication;

5.    记录副本中的数据,然后记下 -log_file-log_position 参数:

mysql> show slave status \G

注意:-log_fileRelay_Master_Log_File 的值,-log_positionExec_Master_Log_Pos 的值。

6.    退出终端,并使用 mysqldump(或类似的实用工具)来创建将复制到目标服务器的 RDS-standby 的备份。在本例中,目标本地服务器为 MySQL-target

$ mysqldump -h hostname -u username -p dbname > backup_file_name.sql

7.    创建备份后,通过登录到 MySQL-target 将该备份文件传输到目标本地服务器。

8.    创建新数据库,并使用转储文件将数据库还原到新的外部数据库实例:

$ mysql -h hostname -u username -p dbname < backup_file_name.sql

9.    登录 RDS-active 数据库实例,设置复制用户,并授予该用户必要的权限:

mysql> create user repl_user@'%' identified by 'repl_user';
   mysql>grant replication slave, replication client on *.* to repl_user@'%';
   mysql>show grants for repl_user@'%';

注意:请务必将 repl_user 替换为您自己的复制用户名。

10.    登录到目标数据库实例并停止 MySQL 服务器。

11.    修改 my.cnf 文件参数以指向您的唯一服务器 ID(如 server_id=2),以及要从数据库实例复制的数据库的名称(如 replicate-do-db=test)。

12.    保存文件。

13.    重启 MySQL-target 上的 MySQL 服务器。

14.    建立一个到 RDS-active 数据库实例的连接:

mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.000001', master_log_pos= 107;

15.    确认 MySQL-target 可以连接到 RDS-active

注意:如果您使用 Amazon Elastic Compute Cloud (Amazon EC2) 作为外部 MySQL 实例,则允许从该安全组或者 RDS-active 数据库实例安全组中的 IP 地址建立连接。如果您使用外部 MySQL 服务器,请运行 telnet 以测试连接。有关更多信息,请参阅如何解决连接到 Amazon RDS 数据库实例时出现的问题?

RDS-EndpointRDS-active 数据库实例的终端节点。用户名和密码与您在第 9 步创建的用户名和密码相同。MASTER_LOG_FILE MASTER_LOG_POS 是在第 5 步记下的值。

16.    登录到 MySQL-target,并开始复制:

mysql> start slave;

17.    检查复制在 RDS-activeMySQL-target 之间是否同步:

mysql> Show slave status\G

18.    在滞后于主实例的秒数等于零之后,您就可以删除 RDS-standby 数据库实例。