Mysql Gtid特性是5.6加入的一个强大的特性,它的目的在于使用Gtid的Mysql能够在整个复制环境中能够自动的切换,而不像以前需要指定文件和位置,这也一定是未来发展的方向,我们熟知的MGR也是基于Gtid的,所以了解Gtid的原理也是必要的。
Gtid的维护是完全自动的,但是实际使用上确实有较多的坑,也导致很多朋友对Gtid还是觉得畏惧,本系列文章将从Gtid模块的源码出发分析,并且给出总结,然后结合运维和案例进行综合的解析,我希望抛砖引玉让希望了解源码的朋友也有所收获,但是能力有限特别是源码部分如果有错误请指出,并且能够一起交流,如果有朋友有更好的案例也欢迎一起探讨。
当然留下这么一个系列也有自己的原因,好记性不如烂笔头嘛,因此也当自己的一个笔记了。
本系列文章使用源码版本为percona 5.7.14,也比较过5.7.17,5.6.25的源码版本。占时没有能力比较全部的Mysql源码版本,有误导还请见谅。
一、Gtid事务的生命周期
Gtid的全称为global transaction identifier,他在整个复制生态中完全唯一的,下面我们通过一个图来解释它的整个生命周期,假设我们这里有一个master->slave->slave的复制环境,生成了一个Gtid为89dfa8a4-cb13-11e6-b504-000c29a879a3:1的Gtid 事务,因为名字太长我简化为879a3:1如图:
未命名文件.png
我们可以看到在整个生命周期中整个事务的Gtid号是没有改变的,不管在主库还是从库它都是89dfa8a4-cb13-11e6-b504-000c29a879a3:1,这也是为什么叫做全局的原因。
二、本系列文章包含了哪些内容
本系列文章一共分为十节:
- Mysql 5.7 Gtid内部学习(一) 导读
http://www.jianshu.com/p/87f66cdeb49c - Mysql 5.7 Gtid内部学习(二) Gtid相关内部数据结构
http://www.jianshu.com/p/5649644fdc13 - Mysql 5.7 Gtid内部学习(三) Gtid和Last_commt/sequnce_number的生成时机
http://www.jianshu.com/p/6ee969dc2c9b - Mysql 5.7 Gtid内部学习(四) mysql.gtid_executed表的作用和Previous gtid Event的改变
http://www.jianshu.com/p/1f4f9c07ce0b - Mysql 5.7 Gtid内部学习(五) mysql.gtid_executed表/gtid_executed变量/gtid_purged变量的更改时机
http://www.jianshu.com/p/905d7e89a305 - Mysql 5.7 Gtid内部学习(六) Mysql启动初始化Gtid模块
http://www.jianshu.com/p/fc836446cde0 - Mysql 5.7 Gtid内部学习(七) 总结binlog_gtid_simple_recovery参数带来的影响
http://www.jianshu.com/p/c9888d6447c8 - Mysql 5.7 Gtid内部学习(八) Gtid带来的运维改变
http://www.jianshu.com/p/caae9a019dbd - Mysql 5.7 Gtid内部学习(九) 实际案例(一)
http://www.jianshu.com/p/2c25842d58d3 - Mysql 5.7 Gtid内部学习(十) 实际案例(二)
http://www.jianshu.com/p/052a03b68fab
每一节都包含了总结和大量的文字描述,希望对普通的运维DBA也有所帮助,同时也希望对想了解源码的DBA也有所引导。
三、总结
本节只是一个导读,希望能够让大家对Gtid有一个基本了解,如果需要继续了解可以看看官方文档。
- 18.1.3 Replication with Global Transaction Identifiers
作者微信:
微信.jpg