面试冲刺:21---MySQL的日志文件你有了解吗?有哪些?redo log与bin log的区别是什么呢?

一、MySQL的日志文件有哪些?

  • MySQL常见的日志文件有:
    • 错误日志(error log)
    • 慢查询日志(slow query log)
    • 查询日志(query log)
    • 二进制文件(bin log)
    • 重做日志(redo log)
    • 回滚日志(undo log)
  • 本文不讲解每个日志文件的具体细节,详情可参阅给出的每个链接

错误日志

  • 该日志比较简单,对MySQL的启动、运行、关闭都进行了记录
  • 遇到问题时应该首先查看该日志,以便定位问题
  • 该文件不仅记录了所有的错误信息,还给出了警告信息或者正确信息
  • 详情参阅:https://blog.csdn.net/qq_41453285/article/details/104110026

慢查询日志

查询日志

二进制文件

  • 二进制日志记录了对MySQL数据库执行更改的所有操作
  • 若操作本身没有导致数据库发生变化,该操作可能也会写入二进制文件(但是不包括select、show这类操作,因为它们不会对数据库进行修改)
  • 二进制的主要作用有:
    • 恢复(recovery):些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制文件进行point-in-time的恢复
    • 复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步
    • 审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击
  • 详情参阅:https://blog.csdn.net/qq_41453285/article/details/104110026

重做日志

回滚日志

  • 重做日志记录了事务的行为,可以很好地通过其对页进行“重做”操作
  • 但是事务有时还需要进行回滚操作,这时就需要undo因此在对数据库进行修改时,InnoDB存储引擎不但会产生redo,还会产生一定量的undo这样如果用户执行的事务或语句由于某种原因失败了,又或用户用一条rollback语句请求回滚,就可以利用这些undo信息将数据回滚到修改之前的样子
  • 详情参阅:https://blog.csdn.net/qq_41453285/article/details/104346372

二、redo log与bin log的区别是什么?

  • 二进制日志其用来进行POINT-IN-TIME(PIT)的恢复以及主从复制(Replication)环境的建立。从表面上看其和重做日志非常相似,都是记录对于数据库操作的日志。然而,从本质上看,两者有着非常大的不同

不同点①

  • 日志是在InnoDB存储引擎层产生
  • 二进制日志是在MySQL数据库的上层产生的并且二进制日志不仅仅针对于InnoDB而言,MySQL数据库中的任何存储引擎对于数据库的更改都会产生二进制日志

不同点②

  • 两种日志记录的内容形式不同:
    • 二进制日志是一种逻辑日志,其记录的是对应的SQL语句
    • 重做日志是物理格式日志,其记录的是对于每个页的修改

不同点③

  • 两种日志记录写入磁盘的时间点不同:
    • 二进制日志只在事务提交完成后进行一次写入
    • 重做日志在事务进行中不断地被写入,这表现为日志并不是随事务提交的顺序写入的
  • 从下图可以看出:
    • 二进制日志仅在事务提交时记录,并且对于每一个事务,仅包含对应事务的一个日志
    • 重做日志其记录的物理操作日志,因此每个事务对应多个日志条目,并且事务的重做日志写入是并发的,并非在事务提交时写入,故其在文件中记录的顺序并非是事务开始的顺序(下图中带有*的,意为该事务的提交)

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/107753775
今日推荐