Mysql 复制-基于GTID 测试

原创 2016年03月29日 17:12:11

 GTID :  Global  Transaction  Identified


在研究Mycat的时候顺便重新看了一下Mysql的复制策略,以前都是通过传统方式进行文件定位进行的复制设置,这次发现了GTID模式下的复制方式,而且Mysql5.7以及后续的版本对GTID也是大力推崇,所以详细学习了一下GTID的知识,也通过自己的测试进行了配置


为了方便记忆,记录自己在学习GTID中的点点滴滴


本文记录以下几种常见下的GTID复制环境搭建进行记录


1   Master和Slave都是新的数据库服务器,从没有数据的环境开始,这种情况是最简单的,因为不存在数据导入的问题

只需要设置好对应的my.cnf  , 保证主和从服务器的GTID功能开启,启动Master和Slave后,配置slave的change语句后start slave即可

 

2   Master是运行中的数据库,新加入Slave服务器, 而Master开始就是以GTID方式运行的。此时GTID中保存了所有的事务信息,Slave在启动后会一条条的执行,直到与Master的数据同步,这种方式耗费的时间可能比较长


3  Master是运行中的数据库,新加入Slave服务器, 而Master开始并不是以GTID方式运行的。此时GTID中是没有任何信息的,如果此时要配置新的Slave,则需要通过数据的导入导出先保证两个数据库服务器的数据一致,再通过GTID进行数据复制,由于此时需要更改主服务器的my.cnf配置文件,所以必须有重启服务器的过程。



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

server-id = 1
log-bin=mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=true

各个参数的含义不再解释


 此时将主服务器的整个data目录拷贝为从服务器的data目录,使用冷备份的方式,修改从服务器的my.cnf配置文件

 重启主服务器,再启动从服务器,此时可以在从服务器上通过

show global variables like '%gtid%' 看到gtid参数的值,因为这个gtid是跟着data目录的某个文件的,所以会将主服务器的内容带过来,保证两边的一致性

在主服务器上同样执行show global variables like '%gtid%' ,对比主从服务器,可以看到此时完全是一样的


所以只要数据和gtid_executed能够具有一致性就保证了同步的准确性,此时不论什么时候开始从服务器的复制都可以,此时主服务器的每个事务都会记录到gtid中,

所在在从服务器上执行

change master to master_host='host',master_port='3306',master_user='root',master_password='passwd',master_auto_position=1

即可



上面记录的是主服务器配置需要修改,必须重启的操作步骤,在实际操作中,有很多情况下是不允许重启的,在这种情况下肯定主服务器是开启了GTID功能的,所以下面记录如何在这种情况下添加从服务器


首先使用mysqldump --all-databases  --single-transaction  --default-character_set=gbk 去导出数据库备份文件,此时由于主服务器开启了GTID功能,所以set-gtid-purged参数默认是开启的,也就是会在导出的备份文件中带上gtid的信息,保证从服务器不会再次同步已有的事务数据


修改从服务器的my.cnf配置文件, 保证GTID的开启,如果此时不开启GTID,导入会在同步GTID信息的SQL语句处报错,后续再开启GTID也可以,不过需要重新source备份文件


启动从服务器,首先set names gbk 执行source 备份文件导入主服务器的SNAP数据,完成后可以通过show global variables like '%gtid%' 看到对应的GTID值已经同步。此时执行

change master to master_host='host',master_port='3306',master_user='root',master_password='passwd',master_auto_position=1,设置主服务器信息,再执行start slave即可


在以上的操作步骤中,可以完全满足在不影响主服务器的情况下新增从服务器,而且使用的复制方式是GTID


本次实验测试了各个情况,对每种情况都有测试,所以能保证以后正确熟练的使用GTID方式的主从复制!


MySQL主从复制-基于GTID及多线程的复制

GTID        GTID是Global Transaction identity 的缩写。字面翻译是全局事务id。其主要目的是为了简化复制。 GTID的概念      普通的复制...
  • Ghost_leader
  • Ghost_leader
  • 2017-03-09 21:06:20
  • 748

MySQL5.7 基于GTID的多源复制

基于GTID的MySQL5.7的多源复制 主库1:192.168.1.246:3306 主库2:192.168.1.246:3307 从库1:192.168.1.246:3308安装5.7数据库 ...
  • u013820054
  • u013820054
  • 2017-06-07 11:49:55
  • 708

MySQL5.6基于GTID复制配置

一、什么是GTID? Contents [hide] 1 一、什么是GTID? 2 二、GTID的表示方式 3 三、基于GTID的复制配置 4 四、基于GTID复制增加新的slave 5 五、...
  • isoleo
  • isoleo
  • 2016-02-17 13:12:59
  • 2051

MySQL传统复制与GTID复制原理及操作详解

mysql复制在业界里有叫:mysql同步,ab复制等。专业名称就是叫:复制 复制是单向的,只能从master复制到slave上,延时基本上是毫秒级别的。 一组复制结构中可以有多个slave,对于...
  • thundermeng
  • thundermeng
  • 2015-12-25 09:35:06
  • 11552

mysql传统复制(postion)与GTID原理解析

mysql pos与GTID
  • QwQ_QAQ
  • QwQ_QAQ
  • 2017-06-20 20:35:20
  • 791

MySQL 5.6 基于GTID及多线程的复制详解

 一、Mysql 5.6 新特性 MySQL 5.6 主要在查询性能的优化、InnoDB改进以支持高吞吐量的事务、NoSQL风格的API、分区功能的改进、数据复制的改进,增加 PERFORMA...
  • winsonyuan
  • winsonyuan
  • 2014-12-01 13:56:02
  • 1081

mysql5.7多源复制

在mysql5.7.9版本GA之前我们就已经开始使用他的多源复制功能,来实现数据分析部门的需求,将多个系统的数据汇聚到一台服务器上。GA之后用的更加大胆些了。现在贴出来分享下。...
  • sun_ashe
  • sun_ashe
  • 2015-12-24 01:17:47
  • 659

MySQL主从复制实战 - 基于GTID的复制

MySQL主从复制实战 - 基于GTID的复制基于GTID的复制简介基于GTID的复制是MySQL 5.6后新增的复制方式.GTID (global transaction identifier) 即...
  • Solarison
  • Solarison
  • 2017-03-05 16:28:05
  • 3271

mysql之 mysql 5.6不停机主从搭建(一主一从基于GTID复制)

环境说明: 版本 version 5.6.25-log  主库ip: 10.219.24.25 从库ip:10.219.24.22 os 版本: centos 6.7 已安装热备软件:xtr...
  • zhang123456456
  • zhang123456456
  • 2017-06-11 10:36:57
  • 311

MySQL5.6的复制从传统方式改为GTID方式

之前搭建了一主一备的MySQL,使用的是传统复制方式,现在希望将其改造为GTID复制方式。使用GTID方式必须设置GTID_MODE=ON,而GTID_MODE=ON与GTID_MODE=OFF之间是...
  • SClouder
  • SClouder
  • 2015-07-17 15:06:23
  • 873
收藏助手
不良信息举报
您举报文章:Mysql 复制-基于GTID 测试
举报原因:
原因补充:

(最多只允许输入30个字)