共计 2408 个字符,预计需要花费 7 分钟才能阅读完成。
一、什么是 GTID(Global transaction identifiers):
MySQL-5.6.2 开始支持,mysql-5.6.10 后完善,GTID 分成两部分,一部分是服务的 UUid,UUID 保存在 mysql 数据目录的 auto.cnf 文件中, 这是一个非常重要的文件,不能删除,这一部分是不会变的。另外一部分就是事务 ID 了,随着事务的增加,值一次递增, 如下图
+—————+———-+————–+——————+——————————————–+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+——————————————–+
| binlog.000029 | 23556 | | | 724afcc2-29d6-11e4-9902-000c290c0121:1-362 |
+—————+———-+————–+——————+——————————————–+
GTID:724afcc2-29d6-11e4-9902-000c290c0121:1-362
UUID:724afcc2-29d6-11e4-9902-000c290c0121
transactionId:1-362
在整个复制架构中 GTID 是不变化的, 即使在多个连环主从中也不会变。
例如:ServerA —>ServerB —->ServerC
GTID 从在 ServerA ,ServerB,ServerC 中都是一样的。
二、GTID 的工作原理:
1、master 更新数据时,会在事务前产生 GTID,一同记录到 binlog 日志中。
2、slave 端的 i /o 线程将变更的 binlog,写入到本地的 relay log 中。
3、sql 线程从 relay log 中获取 GTID,然后对比 slave 端的 binlog 是否有记录。
4、如果有记录,说明该 GTID 的事务已经执行,slave 会忽略。
5、如果没有记录,slave 就会从 relay log 中执行该 GTID 的事务,并记录到 binlog。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。
三、GTID 的优点:
1. 一个事务对应一个唯一 ID,一个 GTID 在一个服务器上只会执行一次
2.GTID 是用来代替传统复制的方法,GTID 复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置
3. 减少手工干预和降低服务故障时间,当主机挂了之后通过软件从众多的备机中提升一台备机为主机
那么 GTID 复制是怎么实现自动同步,自动对应位置的呢?
例如:ServerC <—–ServerA —-> ServerB
主机 ServerA
备机:ServerB,ServerC
当主机 ServerA 挂了之后,此时 ServerB 执行完了所有从 ServerA 传过来的事务,
ServerC 延时一点。这个时候需要把 ServerB 提升为主机,Server C 继续为备机。
当 ServerC 链接 ServerC 之后, 首先在自己的二进制文件中找到从 ServerA 传过来的最新的 GTID,
然后将这个 GTID 发送到 ServerB ,ServerB 获得这个 GTID 之后, 就开始从这个 GTID 的下一个 GTID
开始发送事务给 ServerC。这种自我寻找复制位置的模式减少事务丢失的可能性以及故障恢复的时间。
四、GTID 的限制:
1. 不支持非事务引擎
2. 不支持 create table … select 语句复制(主库直接报错)
原理:(会生成两个 sql,一个是 DDL 创建表 SQL,一个是 insert into 插入数据的 sql。
由于 DDL 会导致自动提交,所以这个 sql 至少需要两个 GTID,但是 GTID 模式下,只能给这个 sql 生成一个 GTID)
3. 不允许一个 SQL 同时更新一个事务引擎表和非事务引擎表
4. 在一个复制组中,必须要求统一开启 GTID 或者是关闭 GTID
5. 开启 GTID 需要重启(5.7 除外)
6. 开启 GTID 后,就不再使用原来的传统复制方式
7. 对于 create temporary table 和 drop temporary table 语句不支持
8. 不支持 sql_slave_skip_counter
MySQL 5.7 Docker 主从复制架构搭建 http://www.linuxidc.com/Linux/2016-11/136998.htm
MySQL 主从复制操作 http://www.linuxidc.com/Linux/2017-02/141172.htm
MySQL 主从复制数据一致性校验和修复方法及自动化实现 http://www.linuxidc.com/Linux/2017-02/141114.htm
MySQL 主从复制常见错误及解决方法 http://www.linuxidc.com/Linux/2017-02/141059.htm
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程 http://www.linuxidc.com/Linux/2016-11/137635.htm
CentOS 搭建 MySQL 主从复制,读写分离 http://www.linuxidc.com/Linux/2016-09/135121.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/144819.htm