面试题知识点笔记-MySQL日志

目录

MysqI会产生几种日志?

binlog作用是什么?

redolog作用是什么?

undolog作用是什么?

Mysql日志是否实时写入磁盘?

bin log刷盘机制是如何实现的?

redo log刷盘机制是如何实现的?

undo log刷盘机制是如何实现的?

MySQL的binlog有有几种录入格式?分别有什么区别?

Mysq!集群同步时为什么使用binlog?优缺点是什么?


  • MysqI会产生几种日志?

  • 错误日志(error log)

error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过l0gerror=/var/log/mysqld.10g 执行mysql错误日志的位置。

  • 慢查询日志(slow query log)
  1. Ø MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
  2. Ø long_query_time的默认值为10,意思是运行10秒以上的语句。
  3. Ø由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合之前explain进行全面分析。
  4. Ø 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。Ø当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。
  5. 在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MSQL提供了日志分析工具mysqldumpslow。
  • 一般查询日志(general log)

        general log 记录了客户端连接信息以及执行的SQL语句信息,通过MySQL的命令

  • 重写日志(redo log)
  • 回滚日志(undo log)
  • 二进制日志(bin log)
  • binlog作用是什么?

  1. 在redolog之后执行,记录所有的一条条的sql(不包括查询sql),主要用于灾备恢复和主从同步
  2. 但时间操作和其他一些系统变量等数据可能难以恢复
  • redolog作用是什么?

记录数据修改之后的值,在undo log执行之后执行,是记录在磁盘上的数据结构,用于宕机时内存更新但是没有来得及写入磁盘那部分的数据恢复

  • undolog作用是什么?

主要是回滚,记录数据修改之前的值,mvcc并发控制可能会利用undo log返回之前的版本

  • Mysql日志是否实时写入磁盘?

  • bin log刷盘机制是如何实现的?

参数:sync_binlog
binlog 写入策略:

  1. sync binog=0 的时候,表示每次提交事务binlog不会马上写入到磁盘,而是先写到page cache,相对于磁盘写入来说写page cache要快得多,不过在Mysq!崩溃的时候会有丢失日志的风险。
  2. sync binlog=1 的时候,表示每次提交事务都会执行 fsync 写入到磁盘;3、sync binlog的值大于1 的时候,表示每次提交事务都 先写到page cach,只有等到积累了N个事务之后才fsync 写入到磁盘,同样在此设置下Mysq!崩溃的时候会有丢失N个事务日志的风险。
  3. 很显然三种模式下,sync binlog=1 是强一致的选择,选择0或者N的情况下在极端情况下就会有丢失日志的风险,具体选择什么模式还是得看系统对于一致性的要求。
  • redo log&undo log刷盘机制是如何实现的?

change buffer存储脏页,存储之前要用到undo log和redo log

innodb_flush _log_at_trx_commit
取直0:每秒触发一次缓存日志回写磁盘操作,并调用操作系统fsync刷新IO缓存。
取值1:每次提交事务都立即调用操作系统fsync刷新IO缓存。
取值2:每次都把redo 1og写到系统的page cache中,由系统接管什么时候写入磁盘

一个事务的刷盘步骤(重要!!):

 

  • MySQL的binlog有有几种录入格式?分别有什么区别?

logbin格式:

  • binlog_format=STATEMENT(默认):数据操作的时间,同步时不一致每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每- 条sql语句和每一行的 数据变化,减少了bin0g日志量,节约10,提高性能。缺点是在某些情况下会导致 master-slave中的数据不一致( 如sleep()函数,last_insert_id(),以及user-defined functions(udf)等会出 现 问题)
  • binlog format=ROW:批量数据操作时,效率低 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出 现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的 问题。缺 点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
  • binlog_format=MIXED:是以上两种level的混合使用,有函数用ROW,没函数用STATEMENT,但是无法识别系统变量
  • Mysq!集群同步时为什么使用binlog?优缺点是什么?

直接同步磁盘表的二进制数据也可以,但是容易出问题,如果有修改或者更复杂的操作,同步中断后就很难继续同步了

binlog是mysql提供的日志,所有存储引擎都可用,

  • 如上所述,支持增量同步
  • binlog还可以供其他中间件读取,比如同步到hdfs中
  • 如果复制表数据:
  1. 不支持某个阶段回放
  2. 直接复制数据过程中一旦中断复制(比如断网)很难确定复制的offset
  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值