1.GTID的概念
GTID(global transaction identifier)是全局事务标识符,在MySQL5.6版本中作为一个超级特性被推出。事务标识不仅对于Master(起源)的服务器来说是惟一的,而且在整个复制拓扑架构来说,也是全局唯一的。
1)GTID的格式为:
其中source_id :通过使用MySQL服务的server_uuid来表示 ,transaction_id :是在事务提交的时候系统顺序分配的一个序列号
2)mysql.gtid_executed表
GTIDs都存储在gtid_executed数据表中,在mysql系统数据库中。每一行的数据代表一个GTID或者一个GTID集合。包括source_uuid,集合开始的事务id和集合结束的事务id
备注:事务并不是立马写进gtid_executed表。当启用二进制日志的时候(log-bin = /data/mysqldata/3306/binlog/mysql-bin),只有日志被轮询或者数据库服务被关闭的时候,才会把所有的日志写入到
gtid_executed数据表中。
3.实战例子:
1)关闭数据库:
2)修改my.cnf文件
3)启动数据库
4)执行一条数据
5)查看GTID的状态
备注:可以看到GTID集中分为了两段一个是4160e9b3-58d9-11e8-b174-005056af6f24 ,另外一个是1
其中4160e9b3-58d9-11e8-b174-005056af6f24就是server的uuid
1就是序列号。一直排序下去的。
*server的uuid的查询方式
6)开始继续插入数据
7)查看gtid_executed数据表
备注:这里可以看到他们并不是,马上回写入至gtid_executed数据表中。
8)flush log之后,再次查看gtid_executed数据表
备注:看到只要日志轮询之后,事务就会被写入至gtid_executed数据表中,而且会数据表的压缩技术,控制压缩的变量参数为:[size=14.256px]gtid_executed_compression_period[size=14.256px] ,默认值为1000。
[size=14.256px]
知识点小总结:由于是否开启了GTID,关键是上面提到的两个参数
gtid_mode=ON
enforce-gtid-consistency=true
验证上述参数,在MYSQL服务中是否生效,用如下命令:
这里就算对于GTID一个简单的介绍和运用,下一篇帖子会讲一个基于GTID的replication。
和innodb引擎关于innodb_flush_log_at_trx_commit和sync_binlog两个参数的内部机理的总结。be continue!!!