MySQL OCP888题解001-temp table replicate

原题

You want to create a temporary table named OLD_INVENTORY in the OLD_INVENTORY database on the master server. This table is not to be replicated to the slave server.
Which two changes would ensure that the temporary table does not propagate to the slave?

A、Set binlog_format=MIXED with the --replicate-ignore-temp-table option.
B、Use the --replicate-do-db, --replicate-do-table, or --replicate-wild-do-table option with the value equal to OLD_INVENTORY.
C、Change the binlog_format option to ROW and restart mysqld before you create the OLD_INVENTORY table.
D、Stop SQL_THREAD on the slave until you have finished using the OLD_INVENTORY temporary table.
E、Use the --replicate-ignore-table option with the value equal to OLD_INVENTORY.OLD_INVENTORY and restart mysqld before creating the temporary table.

答案

CE

中文翻译

此处翻译主要基于DeepL,特此鸣谢:

你想在主服务器的OLD_INVENTORY数据库中创建一个名为OLD_INVENTORY的临时表。这个表不会被复制到从属服务器上。
哪两个变化可以确保临时表不会传播到从属服务器上?

A、用--replicate-ignore-temp-table选项设置binlog_format=MIXED。
B、使用 --replicat-do-db, --replicat-do-table, 或 --replicat-wild-do-table 选项,其值等于OLD_INVENTORY。
C、在创建OLD_INVENTORY表之前,将binlog_format选项改为ROW并重启mysqld。
D、在slave上停止SQL_THREAD,直到你使用完OLD_INVENTORY临时表。
E、使用--replicate-ignore-table选项,其值等于OLD_INVENTORY.OLD_INVENTORY,并在创建临时表之前重新启动mysqld。

考点解析

主要考点

如何禁止临时表在主从之间的复制

知识点1:binlog_format=MIXED的复制策略

在MySQL5.7中,当以MIXED日志格式运行时,默认采用基于语句的模式,服务器会在以下条件下自动从基于语句的日志切换到基于行的日志(以下只列出常见情形):

  1. 当一个函数包含UUID()时。
  2. 当一个或多个带有AUTO_INCREMENT列的表被更新,并且调用了一个触发器或存储函数。
  3. 当使用FOUND_ROWS()或ROW_COUNT()时。
  4. 当使用USER()、CURRENT_USER()或CURRENT_USER时。
  5. 当一个语句引用了一个或多个系统变量时。
  6. 当使用LOAD_FILE()函数时。

所以当binlog_format=MIXED时,临时表是支持主从复制的。而且选项A中的replicate-ignore-temp-table在官方根本找不到,所以选线A错误

关于binlog_format=MIXED的官方文档参考链接点这里

知识点2:replicate-ignore-table等相关参数

以下都是跟主从复制有关的系统参数:

  • replicate-ignore-table参数:可以指定复制忽略那些表。创建一个复制过滤器,告诉复制的SQL线程不要复制任何更新指定表的语句,即使任何其他表可能被同一语句所更新。要指定一个以上的表被忽略,可以多次使用这个选项,每个表一次。
  • replicate-do-db参数:可以指定对哪些数据库做复制。使用数据库的名称创建一个复制过滤器。告诉复制的SQL线程将复制限制在默认数据库(即由USE选择的数据库)为db_name的语句。要指定一个以上的数据库,可以多次使用这个选项,每个数据库一次。
  • replicate-do-table参数:可以指定对哪些表做复制。创建一个复制过滤器,告诉复制的SQL线程限制复制到一个指定的表。要指定一个以上的表,请多次使用这个选项,每个表一次。
  • replicate-wild-do-table参数:作用和replicate-do-table基本相同,但区别在于本参数可以使用%和_等通配符,其含义与LIKE模式匹配操作符相同。

与复制有关的系统参数的官方参考文档点这里

由上可知,“使用–replicate-ignore-table选项,其值等于OLD_INVENTORY.OLD_INVENTORY,并在创建临时表之前重新启动mysqld。”,是可以阻止临时表的主从复制的,所以选项E正确。同理,选项B错误

至于选项D所说的停止SQL_THREAD,并不会让临时表的复制不在从库执行,一旦重新启动SQL_THREAD,临时表的复制仍然会在从库执行,所以选项D错误

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值