mysql中的GTID的概念

1.GTID的概念

      MySQL 5.6引入的GTID(Global Transaction ID)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。

      GTID即全局事务ID(global transaction identifier),GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。

      下面是一个GTID的具体形式:
      4e659069-3cd8-11e5-9a49-001c4270714e:1-77


2.GTID的作用

       因为清楚了GTID的格式,所以通过UUID可以知道这个事务在哪个实例上提交的。通过GUID可以极方便的进行复制结构上的故障转移,新主设置。很好的解决了下面这个图(图来自高性能MySQL第10章)的问题。

mysql中的GTID的概念_第1张图片

       (1)在为引入GTID前的主库切换过程

       Server1(Master)崩溃,根据从上show slave status获得Master_log_File/Read_Master_Log_Pos的值,Server2(Slave)已经跟上了主,Server3(Slave)没有跟上主。这时要是把Server2提升为主,Server3变成Server2的从。这时在Server3上执行change的时候需要做一些计算,这里就不做说明了,具体的说明见高性能MySQL第10章,相对来说是比较麻烦的。麻烦的原因是,server3在作为从库去同步新主库server2上的数据是,由于server2中binlog记录的事务id和以前的server1主库的事务id并不一样,那么server2要将之前同步server1的进度转换为server2上的同步进度。

       (2)在引入GTID后的主库切换过程

       这个问题在5.6的GTID出现后,就显得非常的简单。由于同一事务的GTID在所有节点上的值一致,那么根据Server3当前停止点的GTID就能定位到Server2上的GTID。甚至由于MASTER_AUTO_POSITION功能的出现,我们都不需要知道GTID的具体值,直接使用CHANGE MASTER TO MASTER_HOST='xxx', MASTER_AUTO_POSITION命令就可以直接完成failover的工作。


学习资料参考于:

http://www.bkjia.com/sjkjc/1048133.html

你可能感兴趣的:(mysql中的GTID的概念)