GTID复制详解
前言
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复制详解的更多相关文章
- MySQL异步复制、半同步复制详解
MySQL数据复制的原理图大致如下: 从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现: 其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O ...
- mysql的主主复制详解
Mysql双主部署 解释: 所谓双主备份,其实也就是互做主从复制,每台master既是master,又是另一台服务器的slave.这样,任何一方所做的变更,都会通过复制应用到另外一方的数据库中. 要求 ...
- MYSQL 复制详解
MySql 复制介绍 MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况 下复制是异步进行的,从库也不需要一直连接到主库来同步数据 MySQL复制的数据 ...
- MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- MySQL数据的主从复制、半同步复制和主主复制详解-转
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- Java中对象的深复制和浅复制详解
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...
- Apache的对象复制详解
BeanUtils.copyProperties 和 PropertyUtils.copyProperties 两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标 ...
- 随心所欲玩复制 详解robocopy
说实话,Windows系统自带的复制功能不仅功能简单,而且定制性也不强,每每在对大量文件进行复制.移动.备份时,总少不了繁杂往复的操作.不过幸好,微软意识到了这一点,为我们提供了一款很强力的复制备份工 ...
- MariaDB主从半同步复制详解
半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay lo ...
随机推荐
- flask动态url规则
动态URL规则 URL规则可以添加变量部分,也就是件更符合同规则的URL抽象成一个URL模式. @app.route('/item/<id>') def item(id): return ...
- 名片管理系统v1.1(main)
# version: 1.1# author: Mark import cords_tools while True: # 显示界面 cords_tools.show_cords() cords ...
- Android刮刮卡自定义控件
网上的都是自己绘制的或者图片,我的需求是可以随意的自定义底部和顶部的布局.所以自己重写一个,原理就是直接继承 View 来实现一个刮层,让这个刮层和图片以及文字不产生任何依赖,再结合 FrameLay ...
- DOM拓展表格小练习
涉及的知识点 DOM操作HTML页面.DOM操控表格.一些基本的事件.遍历知识.数组字符串知识.函数的作用域知识 效果图 html代码 <body><div id="con ...
- 仿腾讯课堂固定滚动列表ReactNative组件
前言 由于业务需要做成类似腾讯课堂课程详情滚动的效果,考虑到后面有可能有新的呈现方式,RN提供的组件没有这种滚动控件,不如自己封装,其实去年已经写了一篇但是写的比较乱,周末花了点时间重写梳理下做的东西 ...
- deeplearning.ai 人工智能行业大师访谈 Pieter Abbeel 听课笔记
1. Pieter Abbeel小时候想做一个篮球运动员 - -!上学的时候喜欢数学和物理,上大学之后很自然的学工程.Pieter定义工程问题是"解决实际中应用物理和数学的问题". ...
- bootstrap-table操作之“删除”
最近在做一个新的后台管理系统,在对数据进行操作时需要写一个"删除"功能,如图所示: 下面我来描述一下实现过程中出现的bug以及解决方法: 1.href值为空(href=" ...
- c++2(循环和递归)
其实编程的朋友知道,不管学什么语言,循环和递归是两个必须学习的内容.当然,如果循环还好理解一点,那么递归却没有那么简单.我们曾经对递归讳莫如深,但是我想告诉大家的是,递归其实没有那么可怕.所谓的递归就 ...
- 制作ssh互信的docker镜像
Dockerfile FROM ubuntu:16.04 # package RUN apt-get update; apt-get -y install ssh COPY ssh_config /e ...
- 基于逆波兰式的JAVA计算器
请看下方↓↓