阿里云RDS和本地mysql做主从同步

参考: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

完成。