GTID (Global Transaction ID),也就是全局事务 ID, 其保证为每一个在 master 主上提交的事务在复制集群中可以生成一个唯一的 ID。基于 GTID 的复制是从 MySQL5.6 开始支持的一种新的复制方式,此方式与传统基于 binlog 日志的方式存在很大的差异,在原来的基于日志的复制中,slave从服务器连接到 master主服务器并告诉主服务器要从哪个二进制日志的偏移量开始执行增量同步,这时我们如果指定的日志偏移量不对,这与可能造成主从数据的不一致,而基于 GTID 的复制会避免这个问题。在基于 GTID 的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的 GTID 值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用 GTID 的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。
一、主服务器配置
1.关闭防火墙
2.关闭selinux
vi /etc/selinux/config
3.找到主服务器的mysql配置文件my.cnf(我的是在/etc/my.cnf下面),在配置中增加下面几行配置,server-id设置为1,开启log-bin日志,开启gtid-mode,开启enforce-gtid-consistency,开启log-slave-updates (注意:mysql5.6版本必须要开启log-slave-updates,5.7版本不需要)
log-bin=mysql-bin
gtid-mode=on
enforce-gtid-consistency=1
log-slave-updates=1
4.配置好后,重启一下mysql
5.主服务器连接mysql,输入密码进行连接
6.给从服务器分配用户
grant replication slave,replication client on *.* TO 'repl'@'66.42.102.108' identified by 'repl123456';
7.查看主服务器状态
二、从服务器配置
1.找到从服务器的mysql配置文件my.cnf(我的是在/etc/my.cnf下面),在配置中增加下面几行配置,server-id设置为2,从服务器的server-id必须和主服务器的server-id不同,开启gtid-mode模式,开启enforce-gtid-consistency,开启log-slave-updates(注意:mysql5.6版本必须要开启log-slave-updates,5.7版本不需要)
gtid-mode=on
enforce-gtid-consistency=1
log-slave-updates=1
2.配置好后,重启一下mysql
3.从服务器连接mysql,输入密码进行连接
4.从服务器连接上主服务器(MASTER_HOST是主服务器的ip,MASTER_USER是之前主服务器分配给从服务器的用户名,MASTER_PASSWORD是之前主服务器分配给从服务器的密码,MASTER_AUTO_POSITION是自动寻找同步的位置
5.启动slave
6.查看slave状态
结果如下图:
如果Slave_IO_Running和Slave_SQL_Running都是Yes,说明配置成功了。
基于GTID搭建主从复制的好处就是,不需要管从哪个位置开始复制,系统会自动去找同步的位置。
前两天我还讲过基于传统binglog日志搭建主从的方法:mysql如何实现主从复制,mysql主从复制的实现方法