mysql之gtid

MYSQL-GITD:
5.6
gtid-mode=on
enforce-gtid-consistency=1
log-slave-updates=1
log-bin=
在5.6版本开启GTID时必须开启log-slave-updates,因为GTID相关信息是存放在内存的,重启以后就丢失了,必须要从binlog里找到最新应用到的GTID;
在5.7版本由于引入了mysql.gtid_executed表,GTID信息存放在这个数据表里,那么重启之后就不再需要去读取binlog来获取GTID相关信息了。同时通过gtid_executed_compression_period参数控制执行了多少个事务以后,对mysql.gtid_executed表进行压缩,以免大量的GTID信息占用过多存储空间


gtid_mode=on
enforce_gtid_consistency=on
log_bin=on
GTID复制又叫全局事物ID(global transaction ID),是一个已提交事物的编号,
并且是一个全局唯一的编号,MYSQL5.6版本之后在主从复制类型上新增了GTID复制。

GTID是由server_uuid和事物id组成的,即GTID=servier_uuid:transacton_id。
Server_uuid是在数据库启动过程中自动生成的,每台机器的server-uuid不一样。
UUID存放在数据目录的auto.cnf文件下。而trasaciton_id就是事物提交时由系统
顺序分配的一个不会重复的序列号。

1.GTID使用master_auto_position=1 代替了基于binlog和position号的主从复制搭建的方式,更便于主从复制的搭建。
2.GTID可以知道事务在最开始是在哪个实例上提交的。
3.GTID方便实现主从之间的failover,再也不用不断的去找position和binlog。
GTID不需要传统的binlog和position号了,而是在从库”change master to”时
使用”master_auto_position=1”的方式搭建,这就让操作变得更加方便和可靠了

binlog_gtid_simple_recovery

1. 这个变量用于在MySQL重启或启动的时候寻找GTIDs过程中,控制binlog 如何遍历的算法?
2. 当binlog_gtid_simple_recovery=FALSE 时:
为了初始化 gtid_executed,算法是: 从newest_binlog -> oldest_binlog 方向遍历读取,如果发现有Previous_gtids_log_event , 那么就停止遍历
为了初始化 gtid_purged,算法是: 从oldest_binlog -> newest_binlog 方向遍历读取, 如果发现有Previous_gtids_log_event(not empty)或者 至少有一个Gtid_log_event的文件,那么就停止遍历
3. 当binlog_gtid_simple_recovery=TRUE 时:
为了初始化 gtid_executed , 算法是: 只需要读取newest_binlog
为了初始化 gtid_purged, 算法是: 只需要读取oldest_binlog
4. 当设置binlog_gtid_simple_recovery=TRUE , 如果MySQL版本低于5.7.7 , 可能会有gitd计算出错的可能,具体参考官方文档详细描述

 

posted on 2021-01-15 16:51  踏入IT的小贾  阅读(228)  评论(0编辑  收藏  举报

导航