MySQL OCP888题解067-GTID复制模式下的限制

1、原题

1.1、英文原题

1.2、答案

E

2、题目解析

2.1、题干解析

本题考察GTID复制模式下的限制。

2.2、选项解析

  1. 当使用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、总结

  1. GTID复制模式下,不能将MyISAM表和InnoDB表在同一事务内更新,不能使用CREATE TABLE …SELECT语句。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值