MySQL OCP888题解067-GTID复制模式下的限制
Posted oddrock
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL OCP888题解067-GTID复制模式下的限制相关的知识,希望对你有一定的参考价值。
文章目录
1、原题
1.1、英文原题
1.2、答案
E
2、题目解析
2.1、题干解析
本题考察GTID复制模式下的限制。
2.2、选项解析
- 当使用GTIDs时,不允许使用CREATE TABLE …SELECT语句:因为当binlog_format被设置为STATEMENT时,一个CREATE TABLE …SELECT语句在二进制日志中被记录为一个GTID的事务,但是如果使用ROW格式,该语句被记录为两个GTID的事务。如果源文件使用STATEMENT格式,而复制文件使用ROW格式,复制文件将无法正确处理该事务,因此GTID模式下就通过不允许使用CREATE TABLE …SELECT来防止这种情况的发生。所以选项E正确。
3、知识点
3.1、知识点1:使用GTIDs时对复制的限制
- 当使用GTIDs时,对使用非交易性存储引擎(如MyISAM)的表的更新不能与对使用交易性存储引擎(如InnoDB)的表的更新在同一语句或事务中进行:这个限制是由于在同一个事务中,对使用非事务性存储引擎的表的更新与对使用事务性存储引擎的表的更新混合在一起,会导致多个GTIDs被分配到同一个事务中,因此事务和GTID之间的一对一对应关系被打破,其结果是基于GTID的复制不能正常运行。
- 当使用GTIDs时,不允许使用CREATE TABLE …SELECT语句:当binlog_format被设置为STATEMENT时,一个CREATE TABLE …SELECT语句在二进制日志中被记录为一个GTID的事务,但是如果使用ROW格式,该语句被记录为两个GTID的事务。如果源文件使用STATEMENT格式,而复制文件使用ROW格式,复制文件将无法正确处理该事务,因此GTID模式下就通过不允许使用CREATE TABLE …SELECT来防止这种情况的发生。
- 当使用GTIDs时,不允许使用临时表:CREATE TEMPORARY TABLE和DROP TEMPORARY TABLE语句在使用GTIDs时,不支持在事务、存储过程、函数和触发器内使用(也就是说,当enforce_gtid_consistency系统变量被设置为ON时)。
- 当使用GTIDs时,不支持sql_slave_skip_counter:如果你需要跳过交易,使用源的gtid_executed变量的值来代替。
4、总结
- GTID复制模式下,不能将MyISAM表和InnoDB表在同一事务内更新,不能使用CREATE TABLE …SELECT语句。
MySQL基于GTID的主从复制
1、什么是GTID?
2、组成
3、工作原理
4、GTID主从配置
版本:MySQL5.7
配置master
配置slave
master授权配置
slave配置同步
查看slave的状态
出现这两个yes表示同步成功
通过slave的状态信息,可以看到GTID的值、Matser_UUID等信息
查看master状态
注意对比slave端,Executed_Gtid_Set的值应该是一样的。
5、验证主从
master上
slave上
需要注意的是,GTID的值在完成一次事务后,变成了ceb0ca3d-8366-11e8-ad2b-000c298b7c9a:1-5(自增1)
6、排障
思路
a、确保master开放3306端口
b、最好关闭selinux
c、master上授权同步,slave上change master命令指定master的信息不要写错
d、UUID问题
如果你出现了上图所示的问题,表示你的master和slave的UUID是一样的,一般这种情况多出现于克隆虚拟机
解决办法:
找到slave上的MySQL数据目录下的auto.cnf文件(这个文件其实是自动生成的mysql服务器的UUID值),将它删除,然后重启MySQL,然后MySQL会重新生成一个UUID。然后停掉slave,重新开启就可以了(我的mysql的数据目录是在/usr/local/mysql/data下,详情查看my.cnf配置文件)
通过cat命令查看该文件,发现UUID已经改变
e、总结
排障过程中,注意需要停掉slave,做完修改之后在开启,否则你的修改可能是不会生效的。
以上是关于MySQL OCP888题解067-GTID复制模式下的限制的主要内容,如果未能解决你的问题,请参考以下文章