企业级mysql集群实战----mysql基于gtid的主从复制

Mysql的复制方法一共有四种:基于sql语句、基于行、混合部署、基于GTID

如果是基于position的主从复制:将一个事件拆开来复制,如果一个事件进行的过程中出现问题,那么复制也会出现问题
如果是基于gtid的主从复制:一个以事件为单位进行复制,如果一个事件进行的过程中出现问题,那么复制也不会出现问题

一、GTID的概述

1、全局事务标识:global transaction identified
2、GTID事务是全局唯一性的,且一个事务对应一个GTID
3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致
4、GTID用来代替classic的复制方法,不在使用bin-log+pos开启复制,而是使用master_auto_postion=1的方式自动匹配GTID断点进行复制。
5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
6、在传统的slave端,binlog是不用开启的,但是在GTID中,slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。

阿里云的rds目前已经使用gtid
基于gtid的主从复制原理
每个mysql数据库上都有一个唯一uuid
每个事务生成一个id
gtid由上面两者组合: uuid+事务id

二、GTID比传统复制的优势

相对使用binlog+位置的方法来说
gtid让配置主从更加方便
从提升为主时比较方便
在传统的复制里面,当发生故障,需要主从切换,需要找到binlog和pos点,然后将主节点指向新的主节点,相对来说比较麻烦,也容易出错。在MySQL 5.6里面,不用再找binlog和pos点,我们只需要知道主节点的ip,端口,以及账号密码就行,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步

1、更简单的实现failover,不用以前那样在需要找log_file和log_Pos。
2、更简单的搭建主从复制。
3、比传统复制更加安全。
4、GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。

三、GTID的工作原理

1、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
2、slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。
通俗来讲:
从服务器连接到主服务器之后,把自己执行过的GTID(Executed_Gtid_Set)<SQL线程> 、获取到的GTID(Retrieved_Gtid_Set)<IO线程>发给主服务器,主服务器把从服务器缺少的GTID及对应的transactions发过去补全即可。当主服务器挂掉的时候,找出同步最成功的那台从服务器,直接把它提升为主即可。如果硬要指定某一台不是最新的从服务器提升为主, 先change到同步最成功的那台从服务器, 等把GTID全部补全了,就可以把它提升为主了

四、要点

这个是在基于position的主从复制的基础上继续做的

五、搭建基于GTID的主从复制的环境

步骤一:查看自己的主从的mysql服务是否开启
在这里插入图片描述
在这里插入图片描述

步骤二:在主服务器的mysql的配置文件里面加入打开gtid的信息

gtid_mode=ON
enforce-gtid-consistency=true
重启服务

在这里插入图片描述

use mysql;
select * from gtid_executed;发现是空的
在这里插入图片描述

步骤三:在从服务器的mysql的配置文件里面加入打开gtid的信息

gtid_mode=ON
enforce-gtid-consistency=true
重启服务

在这里插入图片描述
步骤四:查看到主库的uuid
cd /var/lib/mysql
mysqlbinlog mysql-bin.000002可以看出完成一个事件需要很多步
(我这里输入为000003,错了,应该是000002)
在这里插入图片描述
步骤五:配置备库
1、先停止复制。关闭slave节点 stop slave
2、修改master信息
3、打开复制。start slave
4、查看状态,可以看到gtid的两个参数是空的

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

步骤六:在主库上插入数据
我这里只建立库,并没有建立表,大家可以自行添加表,更好的实现实验效果
在这里插入图片描述
步骤七:在备库上查看状态,发现gtid的两个参数变了,从1的位置开始复制的
在这里插入图片描述
步骤八:在server1上面查看gtid的信息

use mysql
select * from gtid_+executed;
在这里插入图片描述

=在从库查看gtid模式复制的起始和结束位置

use mysql
select * from mysql.gtid_executed;
发现slave完成了master的所有事件

在这里插入图片描述
以上就是完成基于gtid主从复制的整个过程

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值