linux企业实战 --MySQL数据库之基于GTID的主从复制

1.GTID的含义

  • LiGlobal Transaction Identifier,全局事务标识
  • 一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
  • GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制。
  • 基于gtid的主从复制原理:每个mysql数据库上都有一个唯一uuid,每个事务生成一个id。gtid由上面两者组合: uuid+事务id
  • 更简单的搭建主从复制。
  • 比传统的复制更加安全。在传统的复制里面,当发生故障,需要主从切换,需要找到binlog和pos点,然后将主节点指向新的主节点,相对来说比较麻烦,也容易出错。在MySQL 5.6里面,不用再找binlog和pos点,我们只需要知道主节点的ip,端口,以及账号密码就行,因为复制是自动的,
  • GTID是连续的没有空洞的,保证数据的一致性,零丢失

2.GTID工作原理

  • 当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
  • binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
  • sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID。
  • 如果有记录,说明该GTID的事务已经执行,slave会忽略。
  • 如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog,在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
  • 在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

3.基于GTID的主从复制

此实验是基于position的主从复制的基础上做的

步骤一:在server1(master)上面进行配置

vim /etc/my.cnf

加入:开启gtid的信息
gtid_mode=ON
enforce-gtid-consistency=true

重启数据库:systemctl restart mysqld

在这里插入图片描述在这里插入图片描述
步骤二:登录数据库

mysql -uroot -proot

mysql>show databases;

发现gtid_executed是空的

/var/lib/mysql 路径下,mysqlbinlog mysql-bin.000002 可以看到之前的全部操作

/var/lib/mysql 路径下 ,cat auto.cnf 查看此节点的uuid

重启数据库:systemctl restart mysqld

步骤三:在server2(slave节点)上面进行配置

vim /etc/my.cnf

加入:开启gtid的信息  
gtid_mode=ON
enforce-gtid-consistency=true

systemctl restart mysqld

在这里插入图片描述在这里插入图片描述

步骤四:配置完成后,此时登录数据库: mysql -uroot -p密码==

mysql> stop slave;				##先停止复制
mysql> CHANGE MASTER TO			##修改master信息
    -> MASTER_HOST = '172.25.42.1',
    -> MASTER_USER = 'repl',
    -> MASTER_PASSWORD = 'Drn+19961126',
    -> MASTER_AUTO_POSITION = 1;	##启用gtid,它是自动的
mysql> start slave;

在这里插入图片描述

mysql> show slave status\G			##查看状态,可以看到下面两个参数是空的
 		
 		Retrieved_Gtid_Set: 
        Executed_Gtid_Set: 

在这里插入图片描述在这里插入图片描述

步骤五:在server1上面开始写数据

mysql> use nn
mysql> insert into usertb values ('user2','456');
mysql> insert into usertb values ('user3','789');

在这里插入图片描述

步骤六:在server2(从数据库)上面查看gtid的信息

mysql> show slave status\G;
mysql> use nn
mysql> select * from usertb;

在这里插入图片描述

在这里插入图片描述

步骤七:查看主数据库GTID

mysql> use mysql
mysql> select * from gtid_executed;
mysql> show master status;

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值