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

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

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

错误日志

慢查询日志

查询日志

二进制文件

  • 二进制日志记录了对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)环境的建立。从表面上看其和重做日志非常相似,都是记录对于数据库操作的日志。然而,从本质上看,两者有着非常大的不同

不同点①

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

不同点②

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

不同点③

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥的黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值