MySQL OCP888题解046-哪些语句会被记录到binlog

1、原题

1.1、英文原题

You enable binary logging on MySQL Server with the configuration:
binlog-format=STATEMENT
log-bin
Which database updates are logged on the master server to the binary log by default?
A、all updates except to the TEMPDB database
B、all updates except to the PERFORMANCE_SCHEMA database
C、all updates not involving temporary tables
D、all updates to the default database, except temporary tables
E、all updates to all database

1.2、中文翻译

您可以使用以下配置在MySQL Server上启用二进制日志记录:
binlog-format=STATEMENT
log-bin
默认情况下,哪些数据库更新记录在主服务器上的二进制日志中?
A、 除TEMPDB数据库外的所有更新
B、 除PERFORMANCE_SCHEMA数据库外的所有更新
C、 所有不涉及临时表的更新
D、 默认数据库的所有更新,临时表除外
E、 所有数据库的所有更新

1.3、答案

B

2、题目解析

2.1、题干解析

本题主要考察MySQL二进制日志的记录内容和性能模式。

2.2、选项解析

  1. 因为配置的是基于语句的二进制日志更新,所以临时表的更新语句也会被记录到二进制日志。如果是基于行的二进制日志,则临时表的更新语句不会被记录。所以选项A、C、D错误。
  2. 性能模式事件是特定于MySQL服务器的一个特定实例的。性能模式表被认为是服务器的本地表,对它们的更改不会被复制或写入二进制日志。所以选项B正确。选项E错误。

3、知识点

3.1、知识点1:binlog_format选项

  • binlog_format的值为MIXED时,会使用基于语句的复制,除非是只有基于行的复制才能保证得到正确的结果的情况。例如,当语句包含可加载函数或UUID()函数时,就会出现这种情况。
  • 每台MySQL服务器可以设置它自己的、并且只设置它自己的二进制日志格式,这意味着改变复制源服务器上的日志格式不会导致副本改变其日志格式来匹配。
  • 一个副本不能将收到的ROW日志格式的二进制日志条目转换为STATEMENT格式用于自己的二进制日志。因此,当源文件仍在使用MIXED或ROW格式时,将副本上的二进制日志格式改为STATEMENT格式也会导致相同类型的复制失败。你必须确保在源和副本上做同样的改变。
  • 在二进制日志格式设置为ROW的情况下,许多变化是使用基于行的格式写入二进制日志的。然而,有些变化仍然使用基于语句的格式。例子包括所有的DDL(数据定义语言)语句,如CREATE TABLE, ALTER TABLE, 或DROP TABLE。

官方参考文档
官方参考文档

3.2、知识点2:Performance Schema(性能模式)

MySQL性能模式是一种在低水平上监测MySQL服务器执行情况的功能。性能模式有这些特点。

  • 性能模式提供了一种在运行时检查服务器内部执行的方法。它是通过PERFORMANCE_SCHEMA存储引擎和performance_schema数据库实现的。性能模式主要关注的是性能数据。这与INFORMATION_SCHEMA不同,后者的作用是检查元数据。
  • 性能模式监控服务器事件。一个 "事件 "是指服务器所做的任何需要时间的事情,并且已经被仪器化,从而可以收集时间信息。一般来说,一个事件可以是一个函数调用,操作系统的等待,SQL语句执行的一个阶段,如解析或排序,或整个语句或语句组。事件收集提供了对服务器和几个存储引擎的同步调用(如对互斥)文件和表I/O、表锁等信息的访问。性能模式事件与写入服务器二进制日志的事件(描述数据修改)和事件调度器事件(属于存储程序的一种)不同。
  • 性能模式事件是特定于MySQL服务器的一个特定实例的。性能模式表被认为是服务器的本地表,对它们的更改不会被复制或写入二进制日志。
  • 性能模式的配置可以通过SQL语句更新performance_schema数据库中的表来动态地修改。配置的改变会立即影响数据的收集。
  • 性能模式中的表是内存表,不使用持久的磁盘存储。其内容从服务器启动时开始重新填充,在服务器关闭时被丢弃。

性能模式的目的是提供对服务器执行的有用信息的访问,同时对服务器性能的影响最小。该实现遵循这些设计目标。

  • 激活性能模式不会导致服务器行为的改变。例如,它不会导致线程调度的改变,也不会导致查询执行计划(如EXPLAIN所示)的改变。
  • 服务器监控持续地、不引人注意地发生,而且开销非常小。激活性能模式并不会使服务器无法使用。
  • 即使性能模式在内部失败,服务器代码的执行也会正常进行。

MySQL的sys模式是一组对象,它提供了对性能模式所收集的数据的方便访问。在MySQL 5.7中,sys模式是默认安装的。

官方参考文档

4、总结

  1. MySQL的二进制日志设置为STATEMENT(语句)模式时,会将临时表的更新语句也记录下来。设置为ROW(行)模式时,由于不涉及磁盘数据更改,就不会记录临时表的更新语句。设置为MIXED模式时,大部分情况下仍然会用语句模式,只有少量用语句模式无法记录真实更改时会使用行模式,比如设计UUID(每次都不一样,必须记录更改的值)。
  2. MySQL的performance_schema性能模式的表是内存表,不使用持久的磁盘存储,对性能模式的更改不会被写入二进制日志。
  3. 性能模式的目的是提供对服务器内部执行情况的检查,他对MySQL服务器的性能影响很小,也不会改变内部任何执行行为。
  4. sys模式相当于性能模式的视图,但是sys模式更易用和简单。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值