我想将 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库实例复制到本地备用服务器。
简短描述
要将数据从 Amazon RDS for MySQL 数据库实例迁移到本地服务器,请在 AWS 上创建只读副本。然后,将复制目标从 Amazon RDS for MySQL 只读副本切换到本地服务器。
如果您使用基于全局事务标识符 (GTID) 的复制,请参阅配置与外部源实例之间的二进制日志文件位置复制。
解决方法
创建活动数据库实例的只读副本
完成以下步骤:
-
确认您已为要复制的活动数据库实例启用自动备份。
**注意:**最短备份保留期为 1 天。备份数据时,会产生额外费用。有关详细信息,请参阅 Amazon RDS 定价。
-
使用相同的配置为活动数据库实例创建只读副本。
-
登录到只读副本数据库实例。
-
运行以下命令,以确认只读副本数据库实例与您的活动数据库实例是否匹配。
对于 MySQL 8.0.23 及更高版本:
mysql> show replica status \G
对于 8.0.23 之前的 MySQL 版本:
mysql> show slave status \G
**注意:**当副本实例未落后于您的数据库实例时,Seconds_Behind_Master 参数将显示为 0。
-
在只读副本数据库实例上运行以下命令以停止复制:
mysql> call mysql.rds_stop_replication;
-
要记录 -log_file 和 -log_position 参数,请在只读副本数据库实例上运行以下命令。
对于 MySQL 8.0.23 及更高版本:
mysql> show replica status \G
对于 8.0.23 之前的 MySQL 版本:
mysql> show slave status \G
注意:****-log_file 是 relay_source_log_file 的值,-log_position 是 exec_source_log_pos 的值。
创建只读副本数据库实例的转储文件
完成以下步骤:
-
在 mysqldump 客户端或类似实用程序中运行以下命令,以创建只读副本数据库实例的备份:
mysqldump -h hostname -u username -p dbname > backup_file_name.sql
-
登录您的本地服务器,然后将转储文件传输到该服务器。
将转储文件恢复到新的数据库实例
完成以下步骤:
-
在本地服务器上创建新的外部数据库实例。
-
运行以下命令将转储文件恢复到新的外部数据库实例:
mysql -h hostname -u username -p dbname < backup_file_name.sql
-
登录到您的活动数据库实例。
-
运行以下命令配置复制用户,并向该用户授予必要的权限:
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 替换为您的复制用户名。
-
登录到新的外部数据库实例,然后停止本地服务器。
-
修改 my.cnf 文件参数,使其指向您的唯一服务器 ID 和要复制的数据库名称。例如,server_id=2 和 replicate-do-db=test。
-
保存文件。
-
重启本地服务器。
确认新的外部数据库实例可以连接到活动数据库实例
如果您使用 Amazon Elastic Compute Cloud (Amazon EC2) 作为外部 MySQL 实例,请更新您的实例以允许来自安全组的连接。或者,允许来自活动数据库实例安全组中的 IP 地址的连接。如果您使用外部 MySQL 服务器,请运行 telnet 来测试连接。有关详细信息,请参阅为什么我无法连接到我的 Amazon RDS 数据库实例?
完成以下步骤:
- 要更改副本服务器用于连接源的参数,请在新的外部数据库实例上运行以下命令。
对于 MySQL 8.0.23 及更高版本:
mysql> change replication source to source_host='rds-endpoint', source_user='repl_user', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=107;
对于 8.0.23 之前的 MySQL 版本:
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;
**注意:**请将 rds-endpoint 替换为您的活动数据库实例的端点。使用您在将转储文件恢复到新数据库时创建的用户名和密码。请将 relay_source_file 和 exec_source_log_pos 值替换为只读副本的 -log_file 和 -log_position 值。
- 确认本地服务器可以连接到您的活动数据库实例。
启动复制
完成以下步骤:
-
登录本地服务器。
-
运行以下命令以启动复制:
对于 MySQL 8.0.23 及更高版本:
mysql> start replica;
对于 8.0.23 之前的 MySQL 版本:
mysql> start slave;
-
运行以下命令,以检查您的活动数据库实例与本地服务器之间的复制是否同步:
对于 MySQL 8.0.23 及更高版本:
mysql> show replica status\G
对于 8.0.23 之前的 MySQL 版本:
mysql> show slave status\G
-
当 Seconds_Behind_Master 参数等于 0 时,删除只读副本数据库实例。
相关信息
如何使用 AWS DMS 迁移到 Amazon RDS 或 Amazon Aurora 数据库实例?
使用复制功能从 MySQL 数据库实例导出数据
Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)