linux--mysql(主从复制gtid)

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

linux--mysql(主从复制gtid)_第1张图片

systemctl restart mysqld
use mysql;
select * from gtid_executed;发现是空的

linux--mysql(主从复制gtid)_第2张图片

cd /var/lib/mysql
mysqlbinlog mysql-bin.000002可以看出完成一个事件需要很多步

linux--mysql(主从复制gtid)_第3张图片

在server2上:

vim /etc/my.cnf

linux--mysql(主从复制gtid)_第4张图片

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;

linux--mysql(主从复制gtid)_第5张图片linux--mysql(主从复制gtid)_第6张图片

linux--mysql(主从复制gtid)_第7张图片linux--mysql(主从复制gtid)_第8张图片
测试:

在server1上写入数据

linux--mysql(主从复制gtid)_第9张图片
linux--mysql(主从复制gtid)_第10张图片
在server2上检查:

linux--mysql(主从复制gtid)_第11张图片linux--mysql(主从复制gtid)_第12张图片linux--mysql(主从复制gtid)_第13张图片
linux--mysql(主从复制gtid)_第14张图片

server1:

在这里插入图片描述

你可能感兴趣的:(linux企业应用基础)