InnoDB引擎的MySQL日志模块

在更新数据库的SQL语句执行过程中,会用到 redo log 和 binlog 两个日志模块。

流程如下:

分析器 -> 权限校验 -> 执行器 -> 引擎 redo log(prepare 状态) -> binlog -> redo log(commit状态)

目录

redo log

binlog

为什么更新操作要用到两个日志模块?

更新操作的日志访问顺序


redo log

即重做日志。InnoDB引擎支持的回滚功能,就是依托在此日志之上做的。

对数据库的改变,也就是增删改操作,都会记录在redo log 中。

当出现意外,导致数据库内数据错误的时候,可以根据redo log 做回滚操作。

binlog

即归档日志。是MySQL自带的日志。

无法支持事务回滚,但可以实现数据备份。

为什么更新操作要用到两个日志模块?

理论上来讲,就更新操作本身而言,一个日志模块解决问题是可以的。

但是这里我们看到,两个日志模块,归属不同。一个是MySQL自带的,另一个是InnoDB引擎实现的。

更新操作的日志访问顺序

注意到更新操作中对日志的访问顺序是这样的:

redo log(prepare 状态) -> binlog -> redo log(commit状态)

这是为了保持两个日志的数据一致性。

如果先写redo log 再写 binlog ,在这中间出现意外,机器停止工作。那在重启后,机器会根据redo log 恢复数据,而在 binlog 里没有记录,进行备份的时候,就会丢失这一条数据。

如果先写 binlog ,后写 redo log ,在中间出现意外,数据无法恢复,但又存在记录。

按照交叉操作,如果在执行完 redo log(prepare 状态) -> binlog 出现意外,可以依赖MySQL的处理机制处理。

判断redo log 是否完整,完整则提交。

redo log 没有 commit , 去看 binlog是否完整。

        完整,则提交 redo log 的commit 状态。

        不完整,回滚。

好了,这一篇就到这里了。

早睡早起,注意身体。早起之王祝你风生水起!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值