目录


undo log :记录数据被修改之前的样子
redo log:记录数据被修改之后的样子
bin log:记录整个操作。

关于undo log

关于undo log:
Mysql的undo、redo、bin log分析_mysql
在执行一条涉及数据变更的sql时,在数据加载到buffer Pool时,同时会在undo log写入原来的记录。

关于redolog

关于redo log
mysql对于数据操作是在内存(buffer Pool)中的。但是断电时,内存数据会全部丢失。redo log 记录数据修改之后的值,不管事务是否提交都会记录下来。
Mysql的undo、redo、bin log分析_mysql_02
当redo log buffer可能会出现异常情况:
case1 :redo log buffer 中的数据未能及时写入磁盘,系统宕机。mysql认为该操作为失败操作,重启之后数据回滚
case2 : redo log buffer 刷入磁盘成功之后宕机,那么重启之后mysql会加载redo 内容到buffer Pool中。(redo log commit 才算成功)

关于binlog

关于bin log:记录整个操作过程,主要应用场景:主从数据同步
Mysql的undo、redo、bin log分析_缓存_03

一个事务的提交流程

1、首先执行器根据mysql的执行计划来查询数据,如果buffer Pool中没有,就去数据库中查询,查询到了再将其放到缓存池中。
2、在数据被缓存到缓存池的同时,会写入undo log日志文件
3、更新的动作是在缓存池中完成的。同时会将更新后的数据添加到redo log buffer中
4、将redo log buffer 中数据刷入到redo log文件中
5、将本地操作记录写入到bin log文件中
6、将bin log文件名字和更新内容在binlog中位置记录到redo log中,同时在redo log最后添加commit 标记。