知识分享 | MySQL innodb存储引擎中的事务是如何通过日志来实现

**问题:**MySQL innodb存储引擎中的事务是如何通过日志来实现的?

基本流程如下:

  1. 因为事务在修改页时,要先记undo(数据被修改前的前镜像),在记undo之前要记undo的redo;
    原因:undo的中保存数据被修改前的前镜像数据这一行为,也会涉及undo保存前镜像数据而导致的修改页的操作,故会有redo数据的产生;这和Oracle的redo机制一致:只要发生数据块的改变,redo日志就会记录;MySQL对应的是数据页,Oracle对应的是数据块(默认8k);
  2. 然后修改数据页,再记数据页修改的redo。Redo(里面包括undo的修改)是顺序写,所以一定比数据页先持久化到磁盘。
  3. 当事务需要回滚时,因为有undo,可以把数据页回滚到前镜像的状态,崩溃恢复时,如果redo log中事务没有对应的commit记录,那么需要用undo把该事务的修改回滚到事务开始之前。如果有commit记录,就用redo前滚到该事务完成时并提交掉。

文章至此。

以下为个人公众号,欢迎扫码关注:
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值