原题
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日志格式运行时,默认采用基于语句的模式,服务器会在以下条件下自动从基于语句的日志切换到基于行的日志(以下只列出常见情形):
- 当一个函数包含UUID()时。
- 当一个或多个带有AUTO_INCREMENT列的表被更新,并且调用了一个触发器或存储函数。
- 当使用FOUND_ROWS()或ROW_COUNT()时。
- 当使用USER()、CURRENT_USER()或CURRENT_USER时。
- 当一个语句引用了一个或多个系统变量时。
- 当使用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错误。