- 先建立从数据库,这里用 docker 创建
docker run -d \
--name mysql-slave \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /docker/mysql-slave/conf:/etc/mysql \
-v /docker/mysql-slave/data:/var/lib/mysql \
-v /docker/mysql-slave/logs:/var/log/mysql \
-p 3308:3306 \
-d mysql:5.7.26
- 同步前要先把 RDS 的数据库备份一份到从数据库,因为 RDS 已经有数据了。使用
mysqldump
进行备份 RDS 的数据库
> docker exec -it mysql-slave /bin/bash
> mysqldump -hxxxxxxxxxxx.mysql.rds.aliyuncs.com -uroot -pPassword --databases 需要的数据库(如`test test1 test2 test3`一般排除 information_schema、performance_schema 和 mysql) > db.sql
> //也可以使用如下备份全部数据库
> mysqldump -hxxxxxxxxxxx.mysql.rds.aliyuncs.com -uroot -pPassword --all-databases > db.sql
- 在从库恢复备份
> mysql -uroot -p123456
> mysql> source < db.sql
- 恢复备份后,使用
show global variables like '%gtid%'\G
在主库(RDS)上查询 gtid_purged 的值,如8177958d-a3b3-11ea-8f76-00163e0fbc31:1-2372913
- 使用
show global variables like '%gtid%'\G
在从库查询 gtid_purged 的值是否为空,不为空,使用reset master
清空 - 同步主从信息
docker exec -it mysql-slave mysql -P3306 -uroot -pPassw0rd -e "CHANGE MASTER TO MASTER_HOST='xxxxxxxx.mysql.rds.aliyuncs.com', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='Password', MASTER_AUTO_POSITION=1;" \
-e "START SLAVE;"
docker exec -it mysql-slave mysql -P3306 -uroot -pPassw0rd -e "show slave status\G"
- 按照常规操作,RDS 的一般会报错,主要问题在
4
、5
步,重新走一下就 ok
参考
解决 mysql 开启 GTID 主从同步出现 1236 错误问题
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于