准备工作
1、AWS RDS Mysql开启配置
binlog_format 参数设置为 MIXED
autocommit 参数设置为 1
2、保证RDS与外部库的网络互通(安全组,白名单等)
可以通过运行以下任一命令来查找 RDS 实例的 IP 地址
nslookup rds-endpoint
或者
dig rds-endpoint
配置主从同步
1、将源 MySQL设置为只读
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;
2、 查看日志位置
SHOW MASTER STATUS;
示例输出
File Position
------------------------------------
mysql-bin.000001 155
------------------------------------
3、从库导入数据,mysqldump或者navicat等工具导入
mysqldump --databases database_name \
--single-transaction \
--compress \
--order-by-primary \
-u local_user \
-plocal_password | mysql \
--host=hostname \
--port=3306 \
-u RDS_user_name \
-pRDS_password
确保 -p 选项和输入的密码之间没有空格
4、将源 MySQL设置为可写
mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;
5、配置用于同步的账号
MySQL 5.7
CREATE USER 'sync_user'@'RDS IP' IDENTIFIED BY 'password';
MySQL 8.0
CREATE USER 'sync_user'@'RDS IP' IDENTIFIED WITH mysql_native_password BY 'password';
6、同步用户授予 REPLICATION CLIENT 和 REPLICATION SLAVE 权限
MySQL 5.7
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'sync_user'@'RDS IP' IDENTIFIED BY 'password';
MySQL 8.0
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'sync_user'@'RDS IP';
7、将 AWS RDS 数据库实例设置为副本。
请先以主用户身份连接到 Amazon RDS 数据库实例。然后使用 mysql.rds_set_external_source 命令,将外部 MySQL数据库标识为源实例。
CALL mysql.rds_set_external_source ('主库Host', 3306, 'sync_user', 'password', 'mysql-bin.000001', 155, 0);
8、AWS RDS实例上启动同步
CALL mysql.rds_start_replication;
查看同步状态
SHOW REPLICA STATUS\G;
其他会用到的一些命令
停止复制过程
CALL mysql.rds_stop_replication;
清除只读副本
CALL mysql.rds_reset_external_source;
清除只读副本
CALL mysql.rds_reset_external_master;
备注
分配给 RDS 数据库实例的 IP 地址在以下一种或多种情况下会发生变化:
1.实例已停止并重新启动。
注意:重启实例时,IP 地址不会发生变化。
2.由于实例故障和数据库实例类更新等情况,底层主机被替换。
3.实例上进行了硬件维护。
4.实例位于多可用区环境中,并且发生了故障转移。
5.数据库实例的操作系统进行软件修补。
6.数据库实例的手动故障转移由使用带故障转移的重启操作启动。
7.数据库引擎进行主要或次要版本升级。
8.实例的可用区中断。
如果想避免RDS实例IP变动而造成同步中断,可以把外部库实例放在同一VPC下通过内网互通