如何使用二进制日志将 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_file 是 Relay_Master_Log_File 的值,-log_position 是 Exec_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=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-Endpoint是 RDS-active 数据库实例的端点。用户名和密码与您在第 9 步创建的用户名和密码相同。MASTER_LOG_FILE 和 MASTER_LOG_POS 是在第 5 步中记下的值。
16. 登录到 MySQL-target,并开始复制:
mysql> start slave;
17. 检查复制在 RDS-active 和 MySQL-target 之间是否同步:
mysql> Show slave status\G
18. 在滞后于主实例的秒数等于零之后,您就可以删除 RDS-standby 数据库实例。