mysql的几种日志工作原理

本文详细介绍了MySQL的redo log、binlog和undo log的工作原理,以及它们在事务处理中的作用。还深入探讨了两阶段提交过程,解释了为何需要这种机制以避免数据丢失。此外,文章阐述了MySQL的MVCC实现,特别是在REPEATABLE READ隔离级别下的读写操作规则,以提升并发性能。
摘要由CSDN通过智能技术生成

mysql的几种日志工作原理

redo log

InnoDB引擎层日志,属于物理日志,从5.5.5版本开始加入,记录每次操作的行为,用于宕机恢复。它的空间是固定的, 所以会用完。

binlog

server层日志,采用增量写入方式,主要用于备份数据库或恢复数据库

undo log

回滚日志,用于事务提交失败回滚或其他错误回滚。

redo log和binlog的两阶段提交:

在update操作中,server层的执行器先找引擎层,用查询操作找到要修改的数据,然后用行锁锁定这一行数据(mysql8.0之前可以不调用执行器,先从内存缓存中取数据,如果没找到再找引擎层。8.0之后删除了内存缓存不会有这一步)。
然后
1.准备好redo log, redo log 处于 prepare 状态。
2.执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
3.执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。
当在2之前崩溃时
重启恢复:后发现没有commit,回滚。备份恢复:没有binlog 。一致
当在3之前崩溃时
重启恢复:虽没有commit,但满足prepare和binlog完整,所以重启后会自动commit。备份:有binlog. 一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值