在上一篇博客中,我写了异步主从复制,这篇博客中,我将表述基于GTID的异步主从复制,分析两者有何区别,GTID又有什么优点
官方对于GTID的解释翻译:
全局事务标识符(GTID)进行基于事务的复制。当使用GTID时,每个事务都可以被识别和跟踪,因为它是在原始服务器上提交的,并且由任何从属服务器应用的;这意味着在启动新的从属服务器或故障转移到新的主服务器时,使用GTID引用这些文件中的日志文件或位置是不必要的,这大大简化了这些任务。因为基于GTID的复制完全基于事务,所以很容易确定主服务器和从服务器是否一致;只要在主服务器上提交的所有事务也在从服务器上提交,就可以保证两者之间的一致性。
推荐一个链接,里面讲解的原理,结构图很清晰
https://yq.aliyun.com/articles/57731
这里,我先做实验,做完实验再简单说一下原理,上面的链接可以在看完本篇博客之后去看,不推荐一开始就看
实验环境:rhel7.3
master 172.25.15.1 (server1)
slave 172.25.15.2 (server2)
数据库版本:mysql5.7
压缩包下载地址:http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.7/
在上一篇博客的基础上,查看主从复制是否成功
可以看到,slave_IO和SQL都运行正常
首先,master和slave编辑mysql配置文件,加入gtid模块
vim /etc/my.cnf
编辑内容如下:
重启mysql服务
systemctl restart mysqld
slave登录数据库,停止slave
[root@server2 ~]# mysql -p
mysql> stop slave;
告诉从机主机的IP,用户,密码,以及设置master_auto_position=1
这就是与上一篇的不同之处,可以这么理解,GTID会自动告诉slave主机的二进制日志文件以及position号,这些都是自动的。
mysql> change master to master_host='172.25.15.1',master_user='repl',master_password='Yakexi+007',master_auto_position=1;
开启slave
mysql> start slave;
查看slave状态
mysql> show slave status\G
测试同上一篇博客测试
也可以通过select * from gtid_executed;来查看一些参数