mysql replication(主从复制)(三)GTIDs

一、理论部分mysql

1.一、什么是GTIDs?
sql

1)GTIDs(Global transaction identifiers)是mysql5.65新加入的一项技术数据库

2)档使用GITDs时,不管是在Master上提交事务仍是在Slave上应用,每个事务均可以被识别并跟踪。vim

3)添加新的Slave或者当发生故障须要将Master身份迁移到Slave上时,都无需考虑那一个二进制日志以及哪个position。这样极大简化相关操做。bash

4)GTIDs是彻底基于事务的,所以,不支持MYISAM存储引擎。服务器


这是由MyISAM 和 InnoDB 区别形成:ide

InnoDB和MyISAM是许多人在使用MySQL时最经常使用的两个表类型,这两个表类型各有优劣,视具体应用而定。性能

基本的差异为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,可是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。测试

1.二、GTID的组成:网站

1)GTID由source_id和transaction_id两部分组成。

2)source_id来自于server_uuid,能够在auto.cnf中查看。

3)transaction_id是一个序列数字,从小到大自动生成。

例子:

fc6e129e-a2b4-11e3-a7d8-000c297d497f:23

":"前是server-uuid,后是transaction_id

查看server-uuid:

cat /var/lib/mysql/auto.cnf

1.三、GTIDs的工做原理

1)Slave发送已经执行过的GTID的范围给Master。

2)Master根据收到的GTID范围,补充发送每个丢失的事物给Slave。

wKiom1YDU1_iMiHBAAB63oz4okk358.jpg

如上图所示:

你想从Trx4开始复制,但Trx2在数据库中因某种缘由丢失:

Transaction_id处理方式:

直接从Trx4开始同步,Trx2不再被执行。

GTIDs的处理方式:

Trx2被补充性复制,从Trx4开始日后复制。

1.四、使用GTIDs的限制条件

1)不支持MYSAM。这可能致使多个GTID分配给同一个实务。

2)create table ...select(子查询建立表)语句不支持。

3)create/drop temporary teble语句不支持。

4)必须使用enforce-gtid-consistency参数。

5)slq-slave-skip-counter不支持。

6)在MySQL5.6.9以后的版本导入使用mysqldump制做的备份时,须要保证二进制日志不包含GITDs。

7)在MySQL5.6.7以前,使用mysql_upgrade命令会出现问题。

1.五、旧MySQL版本对配置GTIDs的要求

配置基于GTIDs的Replication

生产环境中,大多数状况下使用的MySQL5.6基本上都是MySQL5.5或更低版本升级而来。这就意味着以前的MySQL Replication的方案是基于传统的方式。因此,咱们须要利用已有的环境升级至基于GITDs的Replication。

二、实验部分

2.一、实验的前提


如下实验以“mysql replication(主从复制)(一)MS模式”为基础,若是你作以下测试,请先参阅以下连接:

http://cmdschool.blog.51cto.com/2420395/1696474

如下操做目的是将mysql升级到5.6版本。

In Master&Slave

2.1.一、step1

查看未升级前的版本:

mysql -V

wKioL1YD55nTUZWlAAB3aMOe2Pw617.jpg

2.1.二、step2

安装mysql的yum源:

yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

若是以上源不适用请自行到官方网站下载:

http://dev.mysql.com/downloads/repo/

升级mysql相关部件:

yum -y update mysql mysql-devel mysql-server

2.1.三、step3

查看升级后的版本:

mysql -V

wKioL1YD7RSRE_BNAABD8DWgGK0543.jpg

2.1.四、step4

尝试启动服务:

/etc/init.d/mysqld start

有可能服务不能启用:

wKioL1YD5aPA2BolAABC1yDk_ec013.jpg

查看日志中的报错:

tail -n 200 /var/log/mysqld.log

wKiom1YD5dShW-KRAAbEBLsQeOw991.jpg

cd /var/lib/mysql/
rm ibdata1 ib_logfile0 ib_logfile1
/etc/init.d/mysqld start

wKioL1YD5oiBlg2QAAAwJRTQNq4986.jpg

“/var/lib/mysql/”请根据本身数据库实际存放路径调整。  

2.1.五、step5

更新自带的数据库

mysql_upgrade -u root -p

wKiom1YQomyQVhWlAAHQQiwOXpA645.jpg

2.二、实验的步骤

2.2.一、step1

In Master&Slave

服务器都设置为read-only

mysql> set @@global.read_only=on;

wKioL1YErO7yX5s-AABdZzIViTQ756.jpg

2.2.二、step2

In Master&Slave

中止服务:

/etc/init.d/mysqld stop

wKioL1YEr3ejT3GyAAA0l4r7pAA196.jpg

2.2.三、step3

开启GTIDS

In Master&Slave

两台机器都包含如下配置参数,用vim编辑他们的/etc/my.cnf

[mysqld]
gtid-mode=on
enforce-gtid-consistency 
log-slave-updates
log-bin

wKioL1YErbWiRfq-AAIRYyHwkDc679.jpg

In Slave

vim编辑Slave的/etc/my.cnf

skip-slave-start

wKiom1YEroiQiMU0AAGsR5oYpKg450.jpg

注意:

1)“skip-slave-start”参数目的是启服务时“Slave_IO_Running”&“Slave_SQL_Running”为“NO”状态,你须要在作完实验后注解掉。

2)“binlog-format=row”若是Master端开启Slave端也要开启,不然Slave状态会异常。

2.2.四、step4

In Master&Slave

/etc/init.d/mysqld start

wKioL1YEr_iB0TgQAAA5hZintLE890.jpg

In Slave

从新配置Slave的change master

mysql> change master to
    -> master_host='10.168.0.103',
    -> master_port=3306,
    -> master_user='repl',
    -> master_password='repl',
    -> master_auto_position=1;
mysql> start slave;

wKiom1YEtBrDhCOWAADqa4EGPoY846.jpg

检查:

show slave status\G

wKiom1YE8WCANP_DAAJK0aOUEiQ209.jpg

wKioL1YE8RLCFPbwAAJlt7t7kh8579.jpg

注意查看:auto_position的参数状态。

相关文章
相关标签/搜索