MySQL GTIDs(global transaction identifiers)
1、如何定义和生成GTIDs
唯一性:在所有主从库都是唯一的,由二元组构成
GTID = source_id:transaction_id |
source_id标记主库的
1.1 server_uuid
获取server_uuid的方式
a、判断data_dir/auto.cnf文件是否存在,如果存在返回
b、不存在的话,自动产生一个新的UUID,并保存到data_dir/auto.cnf中
auto.cnf文件格式如下:
[auto] server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562 |
auto.cnf文件是自动产生的,不要试图修改这个文件。
如果主库的server_uuid发生变化的话,需要重新change master to,故这个auto.cnf文件是只读的。
http://dev.mysql.com/doc/refman/5.6/en/replication-options.html#sysvar_server_uuid
1.2 GTID sets
gtid_set: uuid_set [, uuid_set] ... | ‘‘ uuid_set: uuid:interval[:interval]... uuid: hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh h: [0-9|A-F] interval: n[-n] (n >= 1) |
1.3 GTID产生过程
(1)事务执行完成,并在主库提交
使用主库的UUID以及最小的事务序列数,并将GTID记录到主库的binlog中
(2)当binlog的数据被从库接收后,并存储在relay log中,此时从库SQL线程读取GTID,并将其赋值给变量gitd_next
(3)从库检查GTID,确认没有执行过。如果这个GTID没有使用过,从库写入GTID,并回放这个事务。
slave需要确保两点:
a、GTID没有被之前的事务使用过
b、相关联的事务没有被提交
(4)因为gtid_next非空,slave不会尝试产生一个新GTID,而是将GTID保存在变量gtid_next中
mysql> show global
variables like
‘%gti%‘ ; + --------------------------+------------------------------------------------------------------------------------+ | Variable_name | Value | + --------------------------+------------------------------------------------------------------------------------+ | enforce_gtid_consistency | ON
| | gtid_executed | 5f02986b-c5de-11e3-8d21-001e4f1ef3b7:1-8, b9d59578-df02-11e3-b112-001e4f1f39cf:1-2 | | gtid_mode | ON
| | gtid_owned | | | gtid_purged | 5f02986b-c5de-11e3-8d21-001e4f1ef3b7:1-8, b9d59578-df02-11e3-b112-001e4f1f39cf:1-2 | + --------------------------+------------------------------------------------------------------------------------+ |
2、如何设置基于GTIDs的同步
3、使用GTIDs的一些建议
4、使用GTIDs的限制
5、参考文献
http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html
http://qing.blog.sina.com.cn/1757661907/68c3cad333002qhe.html
http://qing.blog.sina.com.cn/1757661907/68c3cad333002qsk.html
http://qing.blog.sina.com.cn/1757661907/68c3cad333002s5l.html