从MySQL5.6开始增加GTID这个特性,Global Transaction ID,全局事务ID,用来强化主从数据库的一致性,故障恢复,以及容错能力,来替代传统的人工的主从复制;

有了GTID,在进行主备切换的时候,slave们可以自动在新的master上找到复制位置(position),大大简化了复杂复制集群的维护工作,减少了人为设置position的风险,减少了数据不一致性的风险;

**GTID的组成:**

GTID=server_uuid:transaction_id

server_uuid指的是MySQL的uuid,在第一次启动MySQL时生成,保存在auto.cnf中;

transaction_id是事务的id,是一个从1开始的自增计数,表示在这个主库上执行的第几个事务;

比如:

b6af5b5c-666f-11e9-bed3-000c29b85ea6:1,第一个事务

b6af5b5c-666f-11e9-bed3-000c29b85ea6:1-5,第1到第5个事务

**GTID复制的工作原理**

1. master在执行更新操作时,会在事务执行时生成一个GTID,然后把GTID一起记录到binlog中;

2. slave的IO线程去读取master的binlog变更,写入自己的relay-log中;

3. slave从relay-log中取出GTID,比较自己的binlog中是否有次GTID;

4. 如果slave的binlog中有此GTID,则说明该事务已经执行过,不再执行;

5. 如果slave的binlog中没有次GTID,则执行该事务,并记录到自己的binlog中;

**GTID复制的优点**

1. 传统的主从复制,需要手动指定binlog和position,这样比较麻烦,也很容易出错,在master的写操作频繁时,也很难确定position;在GTID复制下,只需要指定MASTER_AUTO_POSITION=1,MySQL就会通过内部机制,自动找点同步;

简单来说,就是简化了复制,因为position是实时更新的,不方便手工指定,所以,GTID可以自动找到position进行同步;

2. GTID支持基于库的多线程复制,在MySQL5.6以前,slave的复制是单线程的,只能一个事件一个事件进行;所以,我们可以把一个表放在一个库里,一个库一个线程,这样就可以实现多线程复制;但是,当只有一个库的时候,多线程复制是没有用的;

**GTID相关变量**

gtid_mode=on:开启GTID;

gtid_executed:当前实例上执行过的事务集合;

GTID介绍的更多相关文章

  1. MariaDB · 版本特性 · MariaDB 的 GTID 介绍

    本文来自阿里的数据库内核月报,写的很详细,主要是关于mariadb开启gtid之后做主从的方法. 原文连接:http://mysql.taobao.org/monthly/2016/02/08/

  2. GTID复制报错处理:Last_Error: Error 'Can't drop database 'test'; database doesn't exist' on query

    创建GTID主从连接: mysql, master_user; 报错显示: Slave_IO_Running: Yes Slave_SQL_Running: No Last_Error: Error ...

  3. MySQL 5.7 Replication 相关新功能说明

    背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...

  4. Mysql基于GTIDs的复制

    通过GTIDs[global transaction identifiers],可以标识每一个事务,并且可以在其一旦提交追踪并应用于任何一个Slave上:这样 就不需要像BinaryLog复制依赖Lo ...

  5. Linux系统——MHA-Atlas-MySQL高可用集群

    Linux系统——MHA-Atlas-MySQL高可用集群 MHA MHA介绍MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的 ...

  6. MySQL 5.7 Replication 相关新功能说明 (转)

    背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...

  7. __MySQL 5.7 Replication 相关新功能说明

      背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相 ...

  8. MySQL-16-主从复制进阶

    延时从库 介绍 延时从库: 是我们人为配置的一种特殊从库,人为配置从库和主库延时N小时 为什么要有延时从库 数据库故障 物理损坏,普通的主从复制非常擅长解决物理损坏 逻辑损坏,普通主从复制没办法解决逻 ...

  9. MySQL-13-日志管理

    常用日志参数 经常用到的有错误.快慢查询.二进制等日志 错误日志 1 作用 记录启动\关闭\日常运行过程中,状态信息,警告,错误,排查MySQL运行过程的故障 2 错误日志配置 默认就是开启的: /数 ...

随机推荐

  1. Python+Appium实现自动抢微信红包

    前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...

  2. SpringBoot 中使用 Swagger2 出现 whitelabel page error 解决方法

    今天使用Swagger最新版,在pom.xml引入 <dependency> <groupId>io.springfox</groupId> <artifac ...

  3. leetcode18 四数之和 双指针

    题外话: 这道题让我想起了 挑战程序设计竞赛有一个抽签问题,类似的a+b+c+d=target,可以重复使用一个数. a+b+c+d=target转化为 a+b=target-c-d.  如果只是判断 ...

  4. 解决关闭ssh后网页停止服务的方法,利用nohup

    上一篇文章提到宝塔面板无法运行,只能用ssh运行app.py. 关闭ssh时,app.py会被杀死.因为app.py的父进程就是ssh,关掉ssh会造成进程被杀死. 解决方法参考  https://w ...

  5. codeforce 849A

    A. Odds and Ends time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. ysoserial Commons Collections3反序列化研究

    0x00 前言 在ysoserial中,官方是没给gadget,这儿经过文章分析我认为的gadget,继承自AbstractTranslate的类被Javassist插桩后返回一个被修改过的templ ...

  7. cs实时系统之网关设计

    今天给大家讲一下client-server系统(cs)设计,基本结构 1.client 客户端,插件式开发,负责对应ui的展示 2.gateway 网关层,管理客户端通信连接,负载后端集群服务 3.s ...

  8. CSS style color all in one

    CSS style color all in one https://developer.mozilla.org/en-US/docs/Web/CSS/color_value /* Hexadecim ...

  9. TypeScript with React

    TypeScript with React # Make a new directory $ mkdir react-typescript # Change to this directory wit ...

  10. flutter web in action

    flutter web in action flutter for web https://flutter.dev/web https://flutter.dev/docs/get-started/w ...