什么是GTID

每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是唯一对应的。 同样的GTID不能被执行两次,如果有同样的GTID,会自动被skip掉。

GTID组成

GTID = SOURCEID:SEQUENCEID SOURCEID 是服务器的唯一标识($datadir/auto.cnf 中存储),通常是服务器的serviceuuid SEQUENCEID:SequenceNumber 是MySQL 内部的一个事物编号,一个MySQL 不会重复的顺序号(保证服务器内唯一)

5.7开启GTID

gtid_mode=ON(必选)
enforce-gtid-consistency(必选)
log_bin=ON(可选)--高可用切换,最好设置ON
log-slave-updates=ON(可选)--高可用切换,最好设置ON
gtid_mode的几个参数的设置

 OFF:不产生GTID,Slave 只接受不带GTID 的事物

 OFF_PERMISSIVE 不产生GTID,Slave 接受不带GTID 事物也接受带GTID的事物

 ON_PERMISSIVE  产生GTID,Slave 接受不带GTID事物也接受带GTID的事物

 ON 产生GTID,SLAVE 只接受带GTID的事物

GTID 的限制:

  1. 由于GTID 的复制是依赖事务的,所以使用GTID 时,有些MySQL 特性不支持,如果事务混合多个存储引擎时候,会产生多个GTID。
  2. 主从库的表引擎不一致,会导致数据比一致,如果从库的引擎不一致,会导致数据不一致 基于GTID 模式复制,
  3. 不支持 create table .... select 语句。因为使用基于行模式的复制,该语句实际上被记录为两个单独的事件,一个是创建表,另 外一个将原来表的数据插入到刚刚创建的新表中 3 不支持create_temporary table 和drop temporary table。
  4. sql_slave_skip_counter 不支持

不推荐在GTID 模式的实例上进行mysql_upgrade 原因: mysqlupgrade 的过程要创建 或修改系统表(非实物引擎),所以不建议在开启GTID 模式的实列上使用带有--write-binlog 选项的mysqlupdate

GTID的应用:

1.搭建主从(复制账号已经授予,并且GTID 已经开启)

第一种 master 运行不久,所有的binlog 保存完整,针对这种情况下,可以使用类似上面的方法搭建。 利用以上的方法搭建,简单快捷。 缺点是如果 Binlog 相对比较多,slave 同步时间相对较长,可能导致网络压力过大。

change master to master_host=192.168.5.100,master_port=3306, master_user='czg'\
master_password='123456',master_auto_position=1;

第二种 当数据量比较大,可能不适合第一种方法,或者我们最原始的binlog 日志已经删除,无法从头开始获取所有的的GTID信息,那么需要从master上获取数据相应的gtid 范围,然后在slave 上设置(gtid_purged) 的方式来跳过这些GTID,最后通过CHANGE MASTER 的方式来搭建主从。

具体的方式如下: GTID 添加从库有两种方法: 1 如果你的master所有的gtid 安装slave后,直接change master 到master 原来是直接从naster 所有的gtid并执行 优点是简单, 缺点是如果binlog 比较太多,数据完全同步需要的时间会很长, 并且master一开始就启用了GTID,适合那些新建不久的数据库。 2: master 或者其他slave的备份搭建的新的slave 原理:获取master的数据和这些数据对应的GTID 范围,然后通过在slave设置@@GLOBAL GTID_PURGED 从而跳过备份包含的 GTID 范围然后通过在slave设置。 优点:操作是可以避免第一种方案的不足 缺点相对比较复杂。适合较大的数据集的情况

具体的方法如下: -- MySQLdumper:在备份时候需要指定 --master-data -- 导出的语句中包括 set @@GLBAL.GTID_PURGED

使用MySQLdumper备份的方式 第一步:在备份时候需要指定 --master-data=2 导出的语句中包括 set @@GLBAL.GTID_PURGED='XXXXXXa:1'; 第二步:恢复的时候先在slave上执行一个reset master; 第三部:导入数据后做change master to

Percona xtrabackup (具体怎么备份参照xbackup 部分)Xtrbackup_binloginfo 包含了GTID的信息 - 在做从库恢复后,需要手工设置,set global gtidpurged='XXXXXXa:1'; - 恢复后 执行change master to

2.跳过错误的方法:

stop slave
set gtid_next='d787d787-bb44-11e6-9019-000c29276043:7';
begin;commit;
set gtid_next='automatic';
show master status(检查一下)

新特性GTID的更多相关文章

  1. MySQl新特性 GTID

    GTID简介 概念 全局事务标识符(GTID)是创建的唯一标识符,并与在源(主)服务器上提交的每个事务相关联.此标识符不但是唯一的,而且在给定复制设置中的所有服务器上都是唯一的.所有交易和所有GTID ...

  2. MySQL5.6 GTID新特性实践

    MySQL5.6 GTID新特性实践 GTID简介 搭建 实验一:如果slave所需要事务对应的GTID在master上已经被purge了 实验二:忽略purged的部分,强行同步 本文将简单介绍基于 ...

  3. [MySQL5.6 新特性] 全局事务标示符(GTID)

    GTID的全称为 global transaction identifier  , 可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建.GTID需要在全局的主-备拓扑结构中保持唯 ...

  4. MySQL5.6 新特性之GTID【转】

    转自 MySQL5.6 新特性之GTID - jyzhou - 博客园http://www.cnblogs.com/zhoujinyi/p/4717951.html 背景: MySQL5.6在5.5的 ...

  5. 初识 MySQL 5.6 新特性、功能

    背景: 之前介绍过 MySQL 5.5 新功能.参数,现在要用MySQL5.6,所以就学习和了解下MySQL5.6新的特性和功能,尽量避免踩坑.在后续的学习过程中文章也会不定时更新. 一:参数默认值的 ...

  6. 简要了解 MySql 5.5/5.6/5.7/8 出现的新特性

    MySQL的开发周期 在比较之前,首先提一下MySQL的开发周期. MySQL一个大版本的开发,大致经历如下几个阶段: Feature Development Feature Testing Perf ...

  7. MySQL5.7的新特性

    MySQL 5.7版本据说已经在了很大的性能提升以及做得更加安全了,想了解更多MySQL 5.7的新特性可以参考我转载叶金荣老师的MySQL 5.7的新特性说明.这里我简单演示一下MySQL 5.7的 ...

  8. MySQL 5.7 GA 新特性

    转载自: http://www.chinaxing.org/articles/Database/2015/10/23/2015-10-22-mysql-5.7.html sys-schema http ...

  9. 总结一下关于mysql 5.6 新特性

    一直断断续续的看一些mysql特性,今天总结一下,以下是列表,网址 http://mariadb.org/ (也是类似的特性), http://mysql.com/ 最近在看关于mysql新特性的一些 ...

随机推荐

  1. linux里所有命令都不存在

    打开/etc/profile ,看这个配置文件里的PATH变量,遍历这个变量里配置的多个路径,查看命令是否存在. 主要是这四个:/bin ,/usr/bin,/sbin,/usr/sbin. PATH ...

  2. BaaS 的由来(1)

    百度百科是这么定义的, BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务.其实不仅是移动应用,现在更多的PC应用也同样适用移动端的标准. 在 ...

  3. 深入理解JVM垃圾收集机制(JDK1.8)

    垃圾收集算法 标记-清除算法 最基础的收集算法是"标记-清除"(Mark-Sweep)算法,分两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象. 不足: ...

  4. MyBatis笔记03

    1.动态sql 01.if:单独使用if,后面必须有where 1=1 代码:<!-- 需要注意的事项:01. 在xml文件中 特殊字符的使用 &&必须换成 and或者 & ...

  5. ASP.NET部分代码示例

    using System; using System.Collections.Generic; using Model; using System.Data; using System.Data.Sq ...

  6. Python 中的继承、多态和封装

    涉及问题: Python 中如何实现多继承,会有什么问题? Python 中的多态与静态方法有什么区别? 答案要点如下: Python 中的继承,就是在定义类时,在括号中声明父类,简单示例如下: cl ...

  7. 笔记:MyBatis XML配置详解

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...

  8. Java多线程:死锁

    周末看到一个用jstack查看死锁的例子.昨天晚上总结了一下jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令.供大家参考  1.Jstack 1.1 jstack能得到运行j ...

  9. /etc/nginx/nginx.conf配置文件详解

    user nginx; #数值和cpu核数个数一致worker_processes 8; #worker与cpu绑定 worker_cpu_affinity 0001 0010 0100 1000 1 ...

  10. 解决exlicpe以debug模式启动或运行速度非常慢的问题

    该问题可能是由于eclipse和tomcat的交互而产生的, 在以debug模式启动tomcat时,发生了读取文件错误, eclipse自动设置了断点,导致tomcat不能正常启动. 解决方法如下:以 ...