2019独角兽企业重金招聘Python工程师标准>>>

mysql - binlog主从复制

GTID (Global Transaction ID)

InnoDB:事务性引擎。 MyISAM:非事务性存储引擎。

GTID = source_id :transaction_id

一个已提交事务的编号。source_id 表示执行事务的主库 uuid(server_uuid),transaction_id 是一个从 1 开始的自增计数,表示在这个主库上执行的第 n 个事务。MySQL 只要保证每台数据库的 server_uuid 全局唯一,以及每台数据库生成的 transaction_id 自身唯一,就能保证 GTID 的全局唯一性。

source_id

在首次启动时 MySQL 会自动生成一个 server_uuid,并且保存到 auto.cnf 文件 。再次启动时,会读取文件继续使用上次生成的server_uuid。

transaction_id

在非事务引擎MyISAM中,autocommit的启用停用不影响其binglog写入begin和commit。INNODB不执行commit,那么本次这些提交都默认的放在一个事务里面。 只有显示的执行commit,才会写入binlog并且真正的提交。

开启GTID,MyISAM也会在binlog中记录变化。

推论:非事务指的是不能以事务控制语句如begin等去做一些批量操作的ACID限制。

作用

Server A的服务器宕机,需要将业务切换到Server B上。同时又需要将Server C的复制源改成Server B。复制源修改的命令语法很简单即CHANGE MASTER TO MASTER_HOST='xxx', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=nnnn。但同一个事务在每台机器上所在的binlog名字和位置都不一样,那么如何定位Server C当前同步停止点,对应Server B的master_log_file和master_log_pos?这也就是为什么M-S复制集群需要使用MMM,MHA这样的额外管理工具的一个重要原因。

这个问题在5.6的GTID出现后,就非常简单。由于同一事务的GTID在所有节点上的值一致,那么根据Server C当前停止点的GTID就能唯一定位到Server B上的GTID。甚至由于MASTER_AUTO_POSITION功能的出现,我们都不需要知道GTID的具体值,直接使用CHANGE MASTER TO MASTER_HOST='xxx', MASTER_AUTO_POSITION=1命令就启用基于GTID的复制, 直接完成failover的工作。

执行

Master是运行中的数据库,新加入Slave服务器:

  1. Master开始就是以GTID方式运行: 此时GTID中保存了所有的事务信息,Slave在启动后会一条条的执行,直到与Master的数据同步,这种方式耗费的时间可能比较长。
  2. Master不是以GTID方式运行: 此时GTID中是没有任何信息的,如果此时要配置新的Slave,则需要通过数据的导入导出先保证两个数据库服务器的数据一致,再通过GTID进行数据复制,由于此时需要更改主服务器的my.cnf配置文件,所以必须有重启服务器的过程。

在主服务器不是以gtid模式运行,须重启主服务器,在Master的my.cnf配置文件中加上如下内容:

server-id = 1
log-bin=mysql-bin<!-- 以下三个参数共生-->
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=true

开启GTID后:

  1. 首先导出数据库备份文件,此时主服务器开启了GTID功能,所以set-gtid-purged参数默认是开启的,也就是会在导出的备份文件中带上gtid的信息,保证从服务器不会再次同步已有的事务数据。

    mysqldump --all-databases --single-transaction --default-character_set=gbk -uroot -proot

  2. 修改从服务器的my.cnf配置文件,保证GTID的开启,否则导入会在同步GTID信息的SQL语句处报错,后续再开启GTID也可以,但需要重新source备份文件。
  3. 启动从服务器,首先set names gbk 执行source 备份文件导入主服务器的SNAP数据,完成后可以通过show global variables like '%gtid%' 看到对应的GTID值已经同步。此时执行
    change master to  master_host='host', master_port='3306', master_user='root',master_auto_position=1, 设置主服务器信息,再执行start slave即可。

转载于:https://my.oschina.net/u/3434392/blog/1475598

mysql - GTID主从复制相关推荐

  1. mysql - binlog主从复制

    2019独角兽企业重金招聘Python工程师标准>>> mysql - GTID主从复制 Mysql replication 从主服务器(master)将数据复制到另外slave服务 ...

  2. 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)

    前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例3310,两个实例间互为主从 主从复制 ...

  3. mysql主从切换gtid不一致_解决mysql使用GTID主从复制错误问题

    解决mysql使用GTID主从复制错误问题 做MySQL主从的话肯定会遇到很多同步上的问题, 大多数都是由于机器宕机,重启,或者是主键冲突等引起的从服务器停止工作, 这里专门收集类似问题并提供整理解决 ...

  4. MySQL——主从复制、ssl主从复制、gtid主从复制

    一.主从复制(Master-Slave) MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升 ...

  5. MySQL之GTID主从复制

    文章目录 1.GTID主从复制 1.1 GTID概念介绍 1.2 GTID的组成部分 1.3 GTID比传统复制的优势 1.4 GTID和Binlog的关系 1.5 GTID的工作原理 1.6GTID ...

  6. Mysql的主从复制,基于position的主从复制(二进制日志文件位置的复制)和基于gtid的主从复制

    一.MySQL的下载流程 https://dev.mysql.com/downloads/mysql/ 二.实验环境 两台7版本的虚拟机+一台7版本的真机 主机信息 主机的功能 server1(172 ...

  7. 基于mysql的主从复制之Mycat简单配置和高可用

    what-mycat 1.Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等. 因此,Mycat本身并 ...

  8. mysql gtid 还是pxc_记一次 PXC 集群拆分引发的思考

    原标题:记一次 PXC 集群拆分引发的思考 作者简介 冷正磊 2018年2月加入去哪儿网 DBA 团队,主要负责机票业务的 MySQL 和 Redis 数据库的运维管理工作,以及数据库自动化运维平台部 ...

  9. 汇总丨MySQL GTID技术点,看这一篇就够了!

    墨墨导读:对于MySQL GTID,经过多年的磨炼已经很稳定了,作为position方式的延伸,在如今使用环境中带来了很多方便.本文分享GTID技术点的汇总. MySQL复制不管用那个方式,都离不开b ...

最新文章

  1. 《ActionScript 3.0权威指南》阅读笔记
  2. linux实验磁盘管理,从0到1学习网络安全 【Linux实验篇-LVM 磁盘管理】
  3. 《SolidWorks 2016中文版机械设计从入门到精通》——第1章 认识SolidWorks1.1 SolidWorks概述...
  4. php uncaught thrown,PHP异常详解
  5. div超出不换行_DIV元素不换行
  6. (一) 自带刷新的列表-LtRecyclerView v2.x版本(LtAdapter)(基本使用)
  7. 企业存储管理的另一种可能 群晖如何成为NAS代名词?
  8. Spring MVC原理及配置详解
  9. Unity2D实现贴图凹凸感并接受实时光照效果
  10. 图解:Activity生命周期
  11. sql查询初学者指南_面向初学者SQL Server查询执行计划–聚集索引运算符
  12. Swift中Class和Struct异同
  13. 一起来读you don't know javascript(一)
  14. Mac上IDA报错/:Permission denied Please specify another file path for the database
  15. .Net Core[译文]
  16. java 读取clob字段的几种方法
  17. 【Spring-IOC】bean扫描器ClassPathBeanDefinitionScanner详解
  18. 【安安教具】-【工具】-【随机点名】模拟器 教你如何用python制作随机点名器
  19. Storage System
  20. 职场通病之 - 眼里揉不得沙子

热门文章

  1. LeetCode刷题(48)--Remove Duplicates from Sorted List II
  2. stm32g474教程_(完整版)STM32F103通用教程
  3. python的作用域 gbel_[ python ] 全局和局部作用域变量的引用
  4. 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf
  5. matlab tolx,Nelder-Mead算法matlab
  6. multipart form-data boundary 说明
  7. Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索
  8. mysql 数据库视图_MySQL视图介绍
  9. MySQL解析json字符串的相关问题
  10. ZooKeeper使用get命令无法获取节点版本信息