MySQL基于GTID的主从同步(一)
2017-09-21 01:15
309 查看
MySQL基于GTID的主从同步(一)
原文来自MySQL的官方文档 MySQL :: MySQL 5.6 Reference Manual :: 17.1.3 Replication with Global Transaction Identifiersglobal transaction identifiers (GTIDs),意味全局事务标识符。在MySQL主从同步中,如果使用GTID的方式来进行同步,任何在各主库中提交的事务能被识别和追踪,而且能被发送到各个从库中去。同时使用GTID模式进行复制,不需要在增加从库或更换主库时区记录binlog日志文件和文件中的偏移位置,极大简化了建主从同步的操作。GTID同步完全基于事务,因此主从的数据一致性是能得到保证的。但使用GTID会带来一些MySQL使用上的限制。具体内容看后续的介绍。
GTID的概念
GTID是主库为每个事务分配的一个全局标识符,这个标识不仅仅在源主库上是唯一的,同时在同步配置中设置的所有数据库中都是唯一的。事务和GTID是一对一的关系。GTID的组成:
GTID = source_id:transaction_id
source_id代表源库,用的是源库的
server_uuid。
transaction_id是个序列号,取决于事务提交的顺序。
在
SHOW SLAVE STATUS语句的输出里,相同源库的GTID会被缩写成下面简单的格式:
3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5
代表uuid为3E11FA47-71CA-11E1-9E33-C80AA9429562这个数据库上的第1个到第5个事务。
GTID集合
GTID的集合像下面那样表示: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)
MySQL中
gtid_executed和
gtid_purged变量会使用GTID set的格式来表示。
GTID会始终在主从上保留,这就意味着能通过查binlog来确定在任意从库上运行的任意事务的源。另外一个GTID在指定的某个数据库中提交了,随后所有有相同的GTID的事务都会被这个数据库忽略。因此在主库上提交的事务不会在从库上重复执行,保证了数据的一致性。
若使用GTID进行同步,从库不需要任何的外部信息,如主库的binlog名称和position,所有需要的信息都会在同步过程中获得。只需要在
CHANGE MASTER TO中指定
MASTER_AUTO_POSITION为1即可。
GTID的生成和生命周期包括下面几步:
1. 事务在主库上提交和执行;
* GTID由主库UUID和当前最小的未使用的事务序列号组成;
* GTID会被写入主库binlog;
2. Binlog传到从库并存储在从库的relay log中(详见 MySQL :: MySQL 5.6 Reference Manual :: 17.2 Replication Implementation)。从库读取GTID,同时将system variable
gtid_next置为GTID的值。这将告诉从库下一个要执行的事务必须符合这个GTID。设置
gtid_next是会话级别的;
3. 从库检查确认该GTID没有用于记录别的事务,如果没有,从库就执行事务并把GTID写入自己的binlog。在执行前进行检查,不仅保证先前没有该GTID的事务被执行,也能确保没有别的会话读取了该GTID但未提交事务的情况。也就是说,不允许多个客户端同时执行相同的事务。
4. 因为
gtid_next不会为空,从库不会去尝试自己生成GTID而不是去读取
gtid_next的值。GTID从主库上获得,并写在binlog中对应的事务之前。
相关文章推荐
- mysql5.6,基于GTID的主从同步与延迟复制
- MySQL与MariaDB基于GTID的主从同步
- MySQL5.6基于GTID的主从复制
- MySQL主从复制-基于GTID及多线程的复制
- MySQL 基于GTID的复制
- mysql之 MySQL 主从基于 GTID 复制原理概述
- springmvc配置mysql数据库读写分离(基于注解aop)加上(搭建mysql主从同步)
- MySQL5.7配置基于GTID的复制及GTID回退到传统模式的方法
- Mysql 基于GTID的复制
- mysql5.6基于GTID模式之高可用架构搭建-MHA(mha0.56)
- MySQL主从复制--MySQL5.6基于GTID及多线程复制
- 基于Gtid的mysql主从复制 和 mysql-proxy 读写分离 - linux_夏日 - 51CTO技术博客
- MySQL 基于文件位置的复制到GTID复制的跨版本升级
- MySQL5.7.18 基于GTID的复制搭建 (on Cent6.5)
- MySQL基于gtid特性与xtrabackup的数据恢复
- MySQL 5.6 基于GTID及多线程的复制详解
- MySQL5.7.18 基于GTID的复制搭建 (on Cent6.5)
- MySQL 基于GTID的复制 --5.6开始
- mysql基于gtid的读写分离
- Mysql 复制-基于GTID 测试