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

文章目录

  • 1、原题
    • 1.1、英文原题
    • 1.2、答案
  • 2、题目解析
    • 2.1、题干解析
    • 2.2、选项解析
  • 3、知识点
    • 3.1、知识点1:使用GTIDs时对复制的限制
  • 4、总结

1、原题

1.1、英文原题

MySQL OCP888题解067-GTID复制模式下的限制_第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语句。

你可能感兴趣的:(MySQL,mysql,数据库,服务器,ocp,sql)