(5.7)mysql高可用系列——MySQL中的GTID复制(理论篇)【转】
转自:https://blog.csdn.net/wmq880204/article/details/53160078
一、GTID的概述:
1、全局事物标识:global transaction identifieds。
2、GTID事物是全局唯一性的,且一个事务对应一个GTID。
3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
4、GTID用来代替classic的复制方法,不在使用binlog+pos开启复制。而是使用master_auto_postion=1的方式自动匹配GTID断点进行复制。
5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
6、在传统的slave端,binlog是不用开启的,但是在GTID中,slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。
二、GTID的组成部分:
前面是server_uuid:后面是一个序列号
例如:server_uuid:sequence number
7800a22c-95ae-11e4-983d-080027de205a:10
UUID:每个mysql实例的唯一ID,由于会传递到slave,所以也可以理解为源ID。
Sequence number:在每台MySQL服务器上都是从1开始自增长的序列,一个数值对应一个事务。
三、GTID比传统复制的优势:
1、更简单的实现failover,不用以前那样在需要找log_file和log_Pos。
2、更简单的搭建主从复制。
3、比传统复制更加安全。
4、GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。
四、GTID的工作原理:
要点:
1、slave在接受master的binlog时,会校验master的GTID是否已经执行过(一个服务器只能执行一次)。
2、为了保证主从数据的一致性,多线程只能同时执行一个GTID。
五、使用GTID的限制
GTID的限制:
(1)不支持非事务引擎(从库报错,stopslave; start slave; 忽略)
(2)不支持create table … select 语句复制(主库直接报错,原因是该语句其实是一个DDL+DML)
(3)不允许在一个SQL同时更新一个事务引擎和非事务引擎的表
(4)在一个复制组中,必须要求统一开启GTID或是关闭GTID
(5)开启GTID需要重启(5.7中可能不需要)
(6)开启GTID后,就不在使用原来的传统的复制方式
(7)对于createtemporary table 和drop temporary table语句不支持
(8)不支持sql_slave_skip_counter
六、使用GTID搭建mysql的主从复制的主要参数:
[mysqld] #GTID: gtid_mode=on enforce_gtid_consistency=on server_id=2003306 #每天实例的server_id都要不一样#binlog log-bin=mysqlbin log-slave-updates=1 #允许下端接入slave binlog_format=row #强烈建议,其他格式可能造成数据不一致#relay log skip_slave_start=1 注意:建议使用mysql-5.6.5以上的最新版本。
(二)、启动GTID的两种方法:
方法一、
1、如果是在已经跑的服务器,你需要重启一下mysql server。
2、启动之前,一定要先关闭master的写入,保证所有slave端都已经和master端数据保持同步。
3、所有slave需要加上skip_slave_start=1的配置参数,避免启动后还是使用老的复制协议。
方法二、
1、如果是新搭建的服务器,直接启动就行了。
七、master-slave搭建的注意事项:
(一)、使用GTID的方式,把salve端挂载master端:
1、启动以后最好不要立即执行事务,而是先change master上。
2、然后在执行事务,当然知不是必须的。
3、使用下面的sql切换slave到新的master。
stop slave; change master to master_host = 192.168.100.200, master_port = 3306, master_user = abobo, master_password=123, master_auto_position = 1;
(二)、如果给已经运行的GTID的master端添加一个新的slave
有两种方法:
方法一、适用于master也是新建不久的情况。
1、如果你的master所有的binlog还在。可以选择类似于上面的方法,安装slave,直接change master to到master端。
2、原理是直接获取master所有的GTID并执行。
3、优点:简单方便。
4、缺点:如果binlog太多,数据完全同步需要时间较长,并且master一开始就启用了GTUD。
方法二、适用于拥有较大数据的情况。(推荐)
1、通过master或者其他slave的备份搭建新的slave。(看第三部分)
2、原理:获取master的数据和这些数据对应的GTID范围,然后通过slave设置@@global.gtid_purged跳过备份包含的gtid。
3、优点:是可以避免第一种方法的不足。
4、缺点:相对来说有点复杂。
(三)、通过备份搭建新的slave:(方法二的扩展)
两种方法:
方法一、mysqldump的方式:
1、在备份的时候指定--master-data=2(来保存binlog的文件号和位置的命令)。
2、使用mysqldump的命令在dump文件里可以看到下面两个信息:
SET @@SESSION.SQL_LOG_BIN=0;
SET @@GLOBAL.GTID_PURGED='7800a22c-95ae-11e4-983d-080027de205a:1-8';
3、将备份还原到slave后,使用change master to命令挂载master端。
注意:在mysql5.6.9以后的命令才支持这个功能。
方法二、percona Xtrabackup
1、Xtrabackup_binlog_info文件中,包含global.gtid_purged='XXXXXX:XXXX'的信息。
2、然后到slave去手工的 SET GLOBAL.GTID_PURGED='XXXXXX:XXXX'。
3、恢复备份,开启change master to 命令。
注意:如果系统运行了很久,无法找到GTID的变好了,可以通过上面的方式进行查找。
八、GTID如何跳过事务冲突:
1、这个功能主要跳过事务,代替原来的set global sql_slave_skip_counter = 1。
2、由于在这个GTID必须是连续的,正常情况同一个服务器产生的GTID是不会存在空缺的。所以不能简单的skip掉一个事务,只能通过注入空事物的方法替换掉一个实际操作事务。
3、注入空事物的方法:
stop slave; set gtid_next='xxxxxxx:N'; begin;commit; set gtid_next='AUTOMAIC'; start slave;
4、这里的xxxxx:N 也就是你的slave sql thread报错的GTID,或者说是你想要跳过的GTID。
转载于:https://www.cnblogs.com/gered/p/11407828.html
(5.7)mysql高可用系列——MySQL中的GTID复制(理论篇)【转】相关推荐
- mysql 5.5半同步复制_(5.5)mysql高可用系列——MySQL半同步复制(实践)
关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...
- 【MySQL高可用】MySQL高可用之MGR部署
[MySQL高可用]MySQL高可用之MGR部署 参考:https://www.xmmup.com/dbbao45mysqlgaokeyongzhimgrconsuljiagoubushu.html ...
- MySQL高可用系列之MHA(二)
一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: ho ...
- mysql高可靠部署_可能是我见过最好的 MySQL 高可用解决方案 MySQL InnoDB Cluster 中文教程!...
公众号关注 「运维之美」设为「星标」,每天带你玩转 Linux ! 这篇文章将详细地介绍 MySQL 的高可用解决方案-- MySQL InnoDB Cluster. 说到高可用性,首先要了解一下什么 ...
- mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...
目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库 [1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabacku ...
- keepalived实现mysql高可用_keepalived+MySQL实现高可用
(一)keepalived概述 Keepalived通过VRRP(虚拟路由冗余协议)协议实现虚拟IP的漂移.当master故障后,VIP会自动漂移到backup,这时通知下端主机刷新ARP表,如果业务 ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个 ...
- 探索MySQL高可用架构之MHA(6)
探索MySQL高可用架构之MHA(6) -----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的Atlas读写分离! 本篇文章主要介绍本次架构中的keepalive部分! 什么是Kee ...
- MySQL高可用方案选型参考
高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题. 可选MySQL高可用方案 MySQL的各种高可用方案,大多是基于以下几种基础来部署的: 基于主从复制: 基于Galera ...
最新文章
- 【每日一算法】对称二叉树
- Spark Streaming与Kafka Streaming对比
- SAP QM 模块主数据
- java取geosever数据_Geoserver - 连接到SQL Server 2008 Express并获取数据
- Atitit.java c#这类编程语言的设计失败点attilax总结
- 制作本地 CentOS-7-x86_64-Everything-2009.iso对应的源
- 前端vue适配不同的分辨率_前端面试时,被问到项目中的难点有哪些?
- VS2008jQuery智能提示
- PHP之mb_internal_encoding使用 1
- 波士顿大学计算机专业世界排名,波士顿大学计算机工程专业大学排名业内最独到阐明...
- oracle 9 10 11 比较好,atitit.Oracle 九 10 11 12新特性attilax总结
- 怎么在Excel里输入可以打钩的选择框?
- 桌面文件丢失如何找回
- tail关键字查询日志
- 研发团队绩效评定机制细则
- Elasticsearch 最佳运维实践总结
- 工业机器人视觉功能详解
- MySQL 慢查询日志介绍
- 程序员兼职可以从什么平台接私活?你值得知道!!!
- 计算机专业术语拜年祝福语,技术部拜年祝福语