mysql主从同步-GTID
GTID是MySQL 5.6以上版本的新特性
开启GTID的必备条件
gtid_mode=on (必选)
enforce-gtid-consistency=1 (必选)
log_bin=mysql-bin (可选) #高可用切换,最好开启该功能
log-slave-updates=1 (可选) #高可用切换,最好打开该功能
GTID的工作流程为:
- master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
- slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
- sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
- 如果有记录,说明该GTID的事务已经执行,slave会忽略。
- 如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
- 在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。
1、新环境配置方式
配置方式大部分都相同,主库配置:/etc/my.cnf
log-bin=mysql_bin
server-id=10
gtid_mode=on
enforce-gtid-consistency=true
log-slave-updates=on
从库配置:/etc/my.cnf
server-id=20
relay-log=myrelay
gtid_mode=on
enforce-gtid-consistency=true
log-slave-updates=on
read_only=on
主库添加授权用户
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
mysql> grant replication slave on *.* to 'admin'@'%' identified by '123456';
从库添加master指向:
mysql> change master to master_host='10.0.0.1',master_port=3306,master_user='admin',master_password='123456',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;
2、现有环境中添加slave
首先将老数据从master上使用mysqldump备份一份,恢复到slave上
然后配置slave,首先指定GTID_PURGED的开始位置,这个值可以在mysqldump备份的文件中查看,一般在该文件的前30行内
SET @@GLOBAL.GTID_PURGED='eca2ddf0-6097-11eb-8bee-0aed26cb74ee:1-146826749';
类似这样的
mysql>SET @@GLOBAL.GTID_PURGED='eca2ddf0-6097-11eb-8bee-0aed26cb74ee:1-146826749';
然后设置master to
mysql>change master to master_host='18.18.18.18',master_port=3306,master_user='backup',master_password='123456',master_auto_position=1;
mysql>start slave;
ok