MySQL基础之日志模块(redo log / binlog)


前言

MySQL可以恢复到半个月内的任意一秒时的状态,这得益于它的日志系统,本文重点介绍MySQL的日志系统


提示:以下是本篇文章正文内容,下面案例可供参考

一、redo log重做日志

重做日志属于innoDB存储引擎

重做日志的操作过程类似于课堂上的临时笔记. 设想以下情景, 课堂上老师讲得太快,你来不及记笔记 , 于是先讲笔记内容简单地记在书角,在下课时再重新整理到笔记本上去.

而redo log类似于这个过程,在某一条记录需要更新的时候,MySQL先将其记录到日志系统中去 , 并更新内存.这样在用户看来更新就算完成了. 然后在适当时机再将数据存入文件系统中去.

倘若数据库发生crash, 也不会丢失之前提交的记录

二、binlog归档日志

归档日志属于server层. 用于记录语句的原始逻辑. 但是没有crash-safe能力

三、两种日志的区别

  1. redo log属于物理日志,记录存入的数据(做了什么修改),binlog属于逻辑日志,用于记录语句的原始逻辑
  2. redo log是innoDB特有的 , 而binlog则是属于server层
  3. redo log的空间是固定能用完的,而binlog是追加(分文件)写入的

四、两阶段提交

在做更新操作的时候,redo log的写入分为两个步骤, prepare和commit. 先做prepare,再做commit

下面先介绍更新操作的执行过程.

在这里插入图片描述
换个思路,假如我们不设置redo log分阶段提交
当redolog走完了全程,将日志commit掉了,binlog还未开始执行时, MySQL异常重启. 此时,binlog中并未写入该更新操作的SQL逻辑. 如果某一天MySQL需要还原了, 该更新操作的SQL逻辑就无法找回了

反之,如果先执行了binlog,此时MySQL异常重启, redolog还未将更新的数据写入日志. 那么在还原的过程中,还原回来的数据与准确数据是不符的.

因此,我们需要用到分阶段提交


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值