GTID模式介绍!

开始增加了强大的GTID(Global Transaction ID,全局事务ID)这个特性,用来强化数据库的, 故障恢复, 以及容错能力。用于取代过去传统的主从复制(即:基于binlog和position的异步复制)。


:简化复制。传统复制是基于file和position来实现的,而file和position是人为确定的,file还好一些,但是position却是实时变动的,难以确定,除非对全库加读锁,但这势必会对线上业务产生影响,GTID会自动找position进行数据同步


:跟多线程复制相关。多线程复制是基于组提交方式实现的,而组提交信息是存储在GTID中的







1、gtid_executed
在当前实例上执行过的GTID集合,实际上包含了所有记录到binlog中的事务。所以,设置set sql_log_bin=0后执行的事务不会生成binlog事件,也不会被记录到gtid_executed中。执行reset master可以将该变量清空

2、gtid_purged
binlog不可能永久停留在服务器上,需要进行定期清理(如通过expire_logs_days),否则迟早它会把磁盘空间用完。gtid_purged用于记录已经被清除了的binlog事务集合,它是gtid_executed的子集。只有gtid_executed为空时才能手动设置该变量,此时会同时更新gtid_executed为和gtid_purged相同的值。gtid_executed为空意味着要么之前没有启动过基于GTID的复制,要么执行过reset master。执行reset master时同样也会把gtid_purged置空,即始终保持gtid_purged是gtid_executed的子集。

3、gtid_next
会话级变量,指示如何产生下一个GTID。可能的取值:
AUTOMATIC,自动生成下一个GTID,实现上是分配一个当前实例上尚未执行过的序号最小的GTID
ANONYMOUS,设置后执行事务不会产生GTID
显式指定的GTID,可以指定任意形式合法的GTID值,但不能是当前gtid_executed中的已经包含的GTID,否则,下次执行事务时会报错

4、gtid_mode
是否开启GTID复制功能

5、enforce-gtid-consistency=ON
启动强制GTID的一致性,如果开启GTID功能则此参数必须要开启;slave在做同步复制时,无须找到binlog日志和POS点,直接change master to master_auto_position=1即可,自动根据GTID进行同步数据。


(因为同一个库进行多线程复制到Slave上时会造成问题);,复制涉及到多个数据库时多线程复制才有意义。Slave上多线程复制的控制参数为slave-parallel-workers=0(0表示禁用多线程功能)


的原则,记录本文更多的作用为将来实际应用的时候做铺路。所以,笔者不保证内容准确性,仅供参考。欢迎业内大佬指出其中不当之处,在此先表示感谢!

GTID模式介绍!