前言

GTID复制是MySQL 5.6后的新功能,在传统的方式里,主从切换后,需要找到binlog和POS点,然后执行命令change master to 指向新的主库。对于不是很有经验的人来说,往往会找错,造成主从同步复制报错,在MySQL 5.6版本里,无须再找binlog和POS点,只需要知道master的IP、端口、账号和密码即可,因为同步复制是自动的,MySQL会通过内部机制GTID(Global Transaction ID)自动找点同步。另外,MariaDB 10.0版本中,默认开启GTID,无需设置任何参数。

GTID复制名词解释

server_uuid

服务器身份ID。在第一次启动MySQL时,会自动生成一个server_uuid并写入数据目录下的auto.cnf文件里,官方不建议修改。并且server_uuid跟GTID有密切联系。

GTID

全局事务标识符。使用这个功能时,每次事务提交都会在binlog里生成一个唯一的标识符,它由UUID和事务ID组成。首次提交的事务ID为1,第二次为2,第三次为3,依次类推。

开启GTID时,slave进行同步复制的时候,无须找到binlog日志和POS点,直接change master to master_auto_position = 1即可,它会自动找点同步。

GTID的工作流程

1、在master上一个事务提交,并写入binlog里

2、binlog日志发送到slave,slave接收完并写入中继日志里,slave读取到这个GTID,并设置gtid_next的值。例如:

SET@@SESSION.GTID_NEXT='B0869D03-D4A9-11E1-A2E-000C290A6B8F:3;'

然后告诉slave接下来的事务必须使用GTID,并写入它自动的binlog里。

3、slave检查并确认这个GTID没有被使用,如果没有被使用,那么开始执行这个事务并写入它自已的binlog里。

4、由于gtid_next的值不为空,slave不会尝试去生成一个新的gtid,而是通过主从同步来获取GTID

注意: 如果使用了GTID,就不能使用传统的binlog和POS方式。

GTID的局限性包含以下几方面

  • GTID同步复制是基于事务的,所以MyISAM表不支持,这可能导致多个GTID分配给同一个事务
  • 不支持CREATE TABLE...SELECT 语句。因为该语句会被拆分成create table和insert两个事务,并且,如果这两个事务被分配了同一个GTID,则会导致instert被备库忽略掉。

设置MySQL 5.6 GTID方式的主从同步

在my.cnf中加入:

log-bin = mysql-bin
binlog_format = row
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = ON

在master导入数据到slave后,在slave执行:

mysql> CHANGE MASTER TO
> MASTER_HOST = master-host,
> MASTER_PORT = master-port,
> MASTER_USER = repl-user,
> MASTER_PASSWORD = repl-password,
> MASTER_AUTO_POSITION = 1;

GTID复制详解的更多相关文章

  1. MySQL异步复制、半同步复制详解

    MySQL数据复制的原理图大致如下: 从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现: 其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O ...

  2. mysql的主主复制详解

    Mysql双主部署 解释: 所谓双主备份,其实也就是互做主从复制,每台master既是master,又是另一台服务器的slave.这样,任何一方所做的变更,都会通过复制应用到另外一方的数据库中. 要求 ...

  3. MYSQL 复制详解

    MySql 复制介绍 MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况 下复制是异步进行的,从库也不需要一直连接到主库来同步数据 MySQL复制的数据 ...

  4. MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  5. MySQL数据的主从复制、半同步复制和主主复制详解-转

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  6. Java中对象的深复制和浅复制详解

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  7. Apache的对象复制详解

    BeanUtils.copyProperties 和 PropertyUtils.copyProperties 两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标 ...

  8. 随心所欲玩复制 详解robocopy

    说实话,Windows系统自带的复制功能不仅功能简单,而且定制性也不强,每每在对大量文件进行复制.移动.备份时,总少不了繁杂往复的操作.不过幸好,微软意识到了这一点,为我们提供了一款很强力的复制备份工 ...

  9. MariaDB主从半同步复制详解

    半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay lo ...

随机推荐

  1. Zabbix实战-简易教程--告警屏蔽(Maintenances)

    Zabbix Maintenance 一.Zabbix Maintenance(zabbix告警屏蔽) 很多时候,我们需要在某段时间更新维护线上环境,这个时候你是已知触发器会引发报警,所以此时你可以提 ...

  2. 180114 用装饰器实现在不改变函数调用者的代码基础上,实现在函数执行前后分别打印"before" 和 "after"

    def bef_aft(func): #定义一个名为bef_aft的函数名 ,()里的是函数的参数,设置为func, 函数的参数分为实参和形参,有个参数传递的概念 ,下面有很多的解释 def PRin ...

  3. javascript初识

    1.什么是js 基于对象和事件驱动并且具有相对安全性的客户端脚本语言,由网景公司开发.     2.js数据类型   1.基本数据类型 undefined,null,number,boolean,st ...

  4. 线性表的链式存储结构的实现及其应用(C/C++实现)

    存档----------- #include <iostream.h> typedef char ElemType; #include "LinkList.h" voi ...

  5. HDU 1248 寒冰王座(完全背包裸题)

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. UVA 572 dfs求连通块

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

  7. Codeforces Round #280 (Div. 2)_C. Vanya and Exams

    C. Vanya and Exams time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. C语言中%d,%p,%u,%lu等都有什么用处

    %d 有符号10进制整数(%ld 长整型,%hd短整型 )%hu 无符号短整形(%u无符号整形,%lu无符号长整形)%i 有符号10进制整数 (%i 和%d 没有区别,%i 是老式写法,都是整型格式) ...

  9. [Golang]一道考察defer与命名返回值的题目

    题目 输出: 4 1 3 解释 当函数有可命名结果形参时,结果形参的初始值被设置为零值,函数的return语句会设置结果形参的值 当函数有可命名结果形参时,defer函数是可以修改它,然后再将它的值返 ...

  10. JXLS 2.4.0系列教程(四)——多sheet是怎么做到的

    注:本文代码在第一篇文章基础上修改而成,请务必先阅读第一篇文章. http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不会过多的讲解模板中遍历表达式 ...