mysql replication(主从复制)(三)GTIDs
2015-09-23 18:01
666 查看
1、理论部分
[b]1.1、什么是GTIDs?[/b]
1)GTIDs(Global transaction identifiers)是mysql5.65新加入的一项技术
2)档使用GITDs时,无论是在Master上提交事务还是在Slave上应用,每一个事务都可以被识别并跟踪。
3)添加新的Slave或者当发生故障需要将Master身份迁移到Slave上时,都无需考虑那一个二进制日志以及哪一个position。这样极大简化相关操作。
4)GTIDs是完全基于事务的,因此,不支持MYISAM存储引擎。
这是由MyISAM 和 InnoDB 区别造成:
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。
基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
[b]1.2、GTID的组成:[/b]
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:
1)Slave发送已经执行过的GTID的范围给Master。
2)Master根据收到的GTID范围,补充发送每一个丢失的事物给Slave。
如上图所示:
你想从Trx4开始复制,但Trx2在数据库中因某种原因丢失:
Transaction_id处理方式:
直接从Trx4开始同步,Trx2再也不被执行。
GTIDs的处理方式:
Trx2被补充性复制,从Trx4开始往后复制。
[b]1.4、使用GTIDs的限制条件[/b]
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命令会出现问题。[b]1.5、旧MySQL版本对配置GTIDs的要求[/b]配置基于GTIDs的Replication
生产环境中,大多数情况下使用的MySQL5.6基本上都是MySQL5.5或更低版本升级而来。这就意味着之前的MySQL Replication的方案是基于传统的方式。所以,我们需要利用已有的环境升级至基于GITDs的Replication。
2、实验部分
[b][b]2.1、实验的前提[/b][/b]
以下实验以“mysql replication(主从复制)(一)MS模式”为基础,如果你做如下测试,请先参阅如下链接:
/article/4214679.html
以下操作目的是将mysql升级到5.6版本。
In Master&Slave
[b][b][b][b]2.1.1、step1[/b][/b][/b][/b]
查看未升级前的版本:
[b][b][b][b]2.1.2、step2[/b][/b][/b][/b]
安装mysql的yum源:
[b]1.1、什么是GTIDs?[/b]
1)GTIDs(Global transaction identifiers)是mysql5.65新加入的一项技术
2)档使用GITDs时,无论是在Master上提交事务还是在Slave上应用,每一个事务都可以被识别并跟踪。
3)添加新的Slave或者当发生故障需要将Master身份迁移到Slave上时,都无需考虑那一个二进制日志以及哪一个position。这样极大简化相关操作。
4)GTIDs是完全基于事务的,因此,不支持MYISAM存储引擎。
这是由MyISAM 和 InnoDB 区别造成:
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。
基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
[b]1.2、GTID的组成:[/b]
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[b]1.3、GTIDs的工作原理[/b]
1)Slave发送已经执行过的GTID的范围给Master。
2)Master根据收到的GTID范围,补充发送每一个丢失的事物给Slave。
如上图所示:
你想从Trx4开始复制,但Trx2在数据库中因某种原因丢失:
Transaction_id处理方式:
直接从Trx4开始同步,Trx2再也不被执行。
GTIDs的处理方式:
Trx2被补充性复制,从Trx4开始往后复制。
[b]1.4、使用GTIDs的限制条件[/b]
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命令会出现问题。[b]1.5、旧MySQL版本对配置GTIDs的要求[/b]配置基于GTIDs的Replication
生产环境中,大多数情况下使用的MySQL5.6基本上都是MySQL5.5或更低版本升级而来。这就意味着之前的MySQL Replication的方案是基于传统的方式。所以,我们需要利用已有的环境升级至基于GITDs的Replication。
2、实验部分
[b][b]2.1、实验的前提[/b][/b]
以下实验以“mysql replication(主从复制)(一)MS模式”为基础,如果你做如下测试,请先参阅如下链接:
/article/4214679.html
以下操作目的是将mysql升级到5.6版本。
In Master&Slave
[b][b][b][b]2.1.1、step1[/b][/b][/b][/b]
查看未升级前的版本:
mysql -V
[b][b][b][b]2.1.2、step2[/b][/b][/b][/b]
安装mysql的yum源:
yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm[/code]如果以上源不适用请自行到官方网站下载: http://dev.mysql.com/downloads/repo/
升级mysql相关部件:yum -y update mysql mysql-devel mysql-server[b][b][b][b]2.1.3、step3[/b][/b][/b][/b]
查看升级后的版本:mysql -V
[b][b][b][b]2.1.4、step4[/b][/b][/b][/b]
尝试启动服务:/etc/init.d/mysqld start有可能服务不能启用:
查看日志中的报错:tail -n 200 /var/log/mysqld.logcd /var/lib/mysql/ rm ibdata1 ib_logfile0 ib_logfile1 /etc/init.d/mysqld start
“/var/lib/mysql/”请根据自己数据库实际存放路径调整。
[b][b][b][b]2.1.5、step5[/b][/b][/b][/b]
更新自带的数据库mysql_upgrade -u root -p
[b][b][b][b]2.2、实验的步骤[/b][/b][/b][/b]
[b][b][b][b]2.2.1、step1[/b][/b][/b][/b]
In Master&Slave
服务器都设置为read-onlymysql> set @@global.read_only=on;
[b][b][b][b]2.2.2、step2[/b][/b][/b][/b]
In Master&Slave
停止服务:/etc/init.d/mysqld stop
[b][b][b][b]2.2.3、step3[/b][/b][/b][/b]
开启GTIDS
In Master&Slave
两台机器都包含以下配置参数,用vim编辑他们的/etc/my.cnf[mysqld] gtid-mode=on enforce-gtid-consistency log-slave-updates log-bin
In Slave
vim编辑Slave的/etc/my.cnfskip-slave-start
注意:
1)“skip-slave-start”参数目的是启服务时“Slave_IO_Running”&“Slave_SQL_Running”为“NO”状态,你需要在做完实验后注解掉。
2)“binlog-format=row”如果Master端开启Slave端也要开启,否则Slave状态会异常。
[b][b][b][b]2.2.4、step4[/b][/b][/b][/b]
In Master&Slave/etc/init.d/mysqld start
In Slave
重新配置Slave的change mastermysql> 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;
检查:show slave status\G
注意查看:auto_position的参数状态。
本文出自 “老谭linux集群博客” 博客,请务必保留此出处http://cmdschool.blog.51cto.com/2420395/1697570
相关文章推荐
- 连接MySql速度慢的解决方法(skip-name-resolve)
- MySQL的几种备份工具
- Mysql 数据库无法删除 41 错误
- MySQL 日期时间函数
- 解决Mysql乱码问题
- mysql 批量删除表数据
- mysql数据库使用注意事项
- MySQL读写分离--mysql-proxy和amoeba
- MYSQL 创建用户
- mysql命令集锦
- mysql定时生成sql脚本
- [Status] Table_locks_immediate
- mysql应用管理
- ubuntu上安装mysql
- MySQL的随机数函数rand()的使用技巧
- MySQL问题
- win7 下启动mysql
- mysql中int、bigint、smallint 和 tinyint的区别
- MySQL数据库主从
- MySQL主从复制