gtid主从复制(在已经做过position的基础上)
position与gtid是一体
GTID复制不像传统的复制方式(异步复制、半同步复制)需要找到binlog(MASTER_LOG_FILE)和POS点(MASTER_LOG_POS)
只需要知道master的IP、端口、账号、密码即可,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步
和基于position的主从复制的不同之处在于:它是以一整个事件为单位进行复制的
server-id:服务器身份id,在初始化MySQL时,会自动生成一个server-id并写到数据目录的auto.cnf文件中,官方不建议修改,并且server-id跟GTID有密切关系,
并且对于任意一个数据库节点,server-id是唯一的
GTID:全局事务标识符,使用这个功能时,内次事务提交都会在binlog里生成一个唯一的标识符,它由UUID和事务ID组成,首次提交的事务为1,第二次为2,第三次为3,以此类推
开启GTID,无需找到binlog和POS点,直接change master to master_auto_postion=1即可,它会自动寻找同步
在master上一个事务提交,并写入binlog里。
binlog日志发送到slave,slave接收并写入中继日志里,slave读取到这个GTID,并设置gtid_next的值。例如
set @@session。gtid_next=’=fbd841f9-5590-11e8-b819-000c29e6461e’;
然后告诉slave接下来的事务必须使用GTID,并写入它自己的binlog里。
slave检查并确认这个GTID没有被使用,如果没有被使用,那么开始执行这个事务并写入自己的binlog里
由于gtid_next的值不为空,slave不会尝试去生成一个新的gtid而是通过主从同步来获取GTID
在server1上:
vim /etc/my.cnf
加入:开启gtid的信息
gtid_mode=ON
enforce-gtid-consistency=true
systemctl restart mysqld
use mysql;
select * from gtid_executed;发现是空的
cd /var/lib/mysql
mysqlbinlog mysql-bin.000002可以看出完成一个事件需要很多步
在server2上:
vim /etc/my.cnf
systemctl restart mysqld
mysql -uroot -pAPLOX111fox.
show databases;
stop slave;
change master to master_host='172.25.254.1',master_user='repl',master_password='APLOX111fox.',master_auto_position=1;
从第一件事情开始跟踪
start slave;
show slave status\G;
测试:
在server1上写入数据
在server2上检查:
server1: