GTID相关:
在mysql5.6之前,mysql主从复制是slave通过配置master的binlog位置实现的,且每一个slave自身的binlog却不同。而在mysql5.6版本后引入了GTID(全局事务标识符),这个值在master生成,slave只要在开启主从复制时指定master的用户,密码,就可获取master的GTID实现同步,而无需再每次去查看master的binlog位置,大大方便了主从同步的配置。GTID的唯一性强化了数据的主备一致性,故障恢复,以及容错能力。
延迟复制相关:
在之前的博客中介绍过mysql的延迟复制,当时是基于第三方工具percona-toolkit实现的。在mysql5.6版本后,mysql自带了延迟复制的功能,且配置十分简单。
实验环境:
主库:192.168.52.128:3306
从库:192.168.52.135:3306
配置GTID复制:
1:安装mysql(不赘述)
2:开启GTID模式,主从库都要:
在my.cnf配置文件中加入binlog以及gtid相关配置,并重启mysql。
主:[mysqld]
binlog-format=ROW
log-bin=master-bin-log
log-slave-updates=true
gtid-mode=on ----开启gtid
enforce-gtid-consistency=true ---强制GTID一致性
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2 ---设定从服务器的SQL线程数
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=1
从:[mysqld]
server-id = 2
log-bin=mysql-bin
binlog_format=row
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
重启mysql:service mysqld restart
查看主库及丛库的gtid是否开启:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
这时主库上会分配一个gtid号:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
3:在主库上创建复制所需的账户:mysql>grant replication slave on *.* to [email protected].% identified by '123456';
mysql>flush privileges;
4:从库上配置同步。mysql>change master to master_host='192.168.52.128',master_user='repl',master_password='123456',master_auto_position=1;
mysql>slave start;
可以看到这里不用去主库查找binlog与相关的位置信息,直接使用master_auto_position=1,mysql会自动查找同步的位置
5:查看效果:
可以看到同步已经正常进行中,同步位置为7。
进行一些操作,验证同步效果:
主:创建一个实例,并新建一张表,插入一些数据
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
从:
同步正常,使用show slave stautus\G查看同步状态,可以看到同步位置执行到了10;
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
复制延迟配置:mysql>stop slave;
mysql>CHANGE MASTER TO MASTER_DELAY = 100; -------单位为秒
mysql>start slave;
mysql>show slave status \G;
SQL_Delay:字段变为100,表示此时从库与主库的同步开始有了100秒的固定延迟。
SQL_Remaining_Delay:当主库有了新的操作,该字段会进入倒计时,从配置的延迟时间(这里为100)开始。正常情况下为NULL。