mysql GTID

最近在学习mysql45讲这门课的时候,老师在27节讲到主库出问题了,从库怎么办?

在解决的过程中提到了GTID,是mysql5.6版本引入的,这个是哥什么呢?

GTID是master生产的自增ID,每个事务的唯一标识,它由server_id+自增序号构成,因此,不同 mysql节点产生的GTID必然不同,因此在整个集群全局中不会重复

有了整个GTID,mysql主从可以统一的基于binlog完成主从的数据同步,slave上传自己已经执行过的GTID set给master,master即可将自己binlog中拥有而slave没有执行过的gitd set同步给slave,整个对比和同步过程因为gtid有序的原因而变得自动化、高效化

主从同步的理解

master生成binlog中每一条事务都有gtid标识,那么当binlog同步到slave后,salve先将他们保存到中继日志relay-log,然后再读入relay-log逐条的重放事务

在GTID的主动模式下,slave要求开启binlog,并且将重放relay-log产生的事务日志也写入binlog中,这样的意义是,当slave重放relay-log时,可以根据事务gtid去自己的binlog中确认这条事务是否已经执行过,避免因为各种异常造成重复的重放事务,另外,根据此前对gtid的理解,gtid模式的主从同步是基于binlog实现的,为了实现failover容灾,每个slave都应该开启binlog,这样当master宕机后,某个slave作为新的master时,其他slave可以直接基于binlog+gtid从新master开始同步,这才是gtid简化主从同的真正意义

很多时候看这些概念或者要理解这些需要花很长时间,而做开发的我们很少也用到这些,但是还是要学习这样,我觉得意义在于学习这些优秀前辈设计的思路,在遇到问题怎么更加优雅的去解决,学习这些也让我在以后的项目设计中也有所借鉴,感觉自己要学习的东西还有很多。

原文地址:https://www.cnblogs.com/weiluoyan/p/10560945.html