参考:https://blog.csdn.net/qq_31677507/article/details/101545735
我的环境是这样:阿里云RDS是MySQL5.7,我本地是MySQL8
一、从RDS备份要同步的数据库到本地服务器
建议将表结构和数据分开备份。
[root@localhost ~]# mysqldump -h mysqlhost -u mysqluser -p --opt -d databasename > /root/bak_schema.sql
[root@localhost ~]# mysqldump -h mysqlhost -u mysqluser -p -t databasename > /root/bak_data.sql
二、在本地安装mysql,修改相关配置,导入数据
2.1 导入数据
mysql> source /root/bak_schema.sql
mysql> source /root/bak_data.sql
我本地导入表结构时并不成功,可能是MySQL版本的问题,数据库用到了外键约束,导入到MySQL8里面有些字段的约束不匹配导致不成功,我是用Navicat的表结构同步功能创建表之后再导入数据
2.2 修改mysql配置/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server_id = 175
replicate-do-db = article #设置要同步的库
gtid_mode=on #打开gtid同步
enforce_gtid_consistency= 1
log-slave-updates=1
binlog_format = row #binlog日志格式
max_binlog_size = 500M #一个日志文件的大小
expire_logs_days = 10 #保留10天的日志
2.3、重启MySQL
[root@localhost ~]# systemctl start mysqld
三、配置主从同步
3.1、在本地MySQL执行主从同步
mysql> change master to master_host='mysqlhost', master_user='mysqluser',master_port=3306,master_password='password',master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
3.2、手工修改 GTID_PURGED 值
3.2.1、查看备份文件中的GTID_PURGED值
在备份的数据文件中找到第一个遇到的“@@GLOBAL.GTID_PURGED=”后面的值,记录下来,下一步会用到
[root@localhost ~]# more /root/bak_data.sql
3.2.2、重置GTID_PURGED值,
mysql> reset slave;
mysql> SET @@GLOBAL.GTID_PURGED='d0b134a8-afe3-11e8-9107-6c92bf464e82:1-6772909, dec575e8-afe3-11e8-9007-7cd30ac4f854:1-4487736';
3.3、启动并查看slave状态
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status \G
完成。