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

上次更新日期:2022 年 10 月 24 日

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

简短说明

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

如果您使用基于 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 数据库实例,设置复制用户,然后授予该用户必要的权限:请务必将 repl_user 替换为您自己的复制用户名。

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@'%';

注意:有关更多信息,请参阅在 Amazon Aurora 和 MySQL 之间或 Aurora 与另一个 Aurora 数据库集群之间复制

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

11.    修改 my.cnf 文件参数以指向您的唯一服务器 ID 以及要从数据库实例复制的数据库名称。例如,server_id=2replicate-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_FILEMASTER_LOG_POS 是在第 5 步中记下的值。

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

mysql> start slave;

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

mysql> Show slave status\G

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