MySQL(二十三)GTID 复制
Posted 绝世好阿狸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL(二十三)GTID 复制相关的知识,希望对你有一定的参考价值。
本来想自己搭建,结果各种error,放弃。。。(mysql太难用。。。没做过运维)
使用传统的基于文件位置的方式:
需要slave指定复制的文件和位置,可能不准,位置靠后会少日志,位置靠前可能冲突,但是宁可冲突也不能少,所以需要手动跳过,不太方便。
基于GTID的模式:
在执行事务时,都会先生成gtid,具体gtid的值是啥,取决于一个session变量,可以是自增也可以是固定值,一般是自增;
gtid的格式是serverid:txid;
在为当前事务生成了gtid以后,就会执行该事务,执行前,会判断此事务的gtid是否在已执行过的gtid集合里,如果在,就跳过该事务,否则执行事务,并记录到gtid结合里;
主库执行完事务,记录的binlog里会有一条set gtid next = xxx的语句。这样从库在执行binlog时,不会按照自己的gtid分配策略给该事务分配gtid,而是用了主库生成的gtid,这样,主库就可以保证任何从库执行事务时,gtid是唯一的。从库同样根据自己的gtid执行集合判断是否执行过该事务;
如果需要换主,就将自己的gtid集合发送给新的master,master对比自己的gtid集合,计算出差集,将差集里的事务发送给slave。整个过程不需要人工指定位置,由slave和master基于各自的gtid自动完成,方便了很多;
那如果发生冲突怎么解决?可以set gtid = xxx,xxx是冲突的事务的gtid,把这个gtid加入到执行集合中,这样就相当于跳过了这个事务。
先记录几个:
https://cloud.tencent.com/developer/article/1401313
http://www.xiaotanzhu.com/%E6%95%B0%E6%8D%AE%E5%BA%93/2016/08/25/mysql-gtid-master-slave.html
以上是关于MySQL(二十三)GTID 复制的主要内容,如果未能解决你的问题,请参考以下文章