原创

Mysql 的 redolog、binlog、undolog都是什么?起什么作用?

温馨提示:
本文最后更新于 2022年11月29日,已超过 891 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

1. redolog:重做日志

2. binlog:归档日志

3. undolog:回滚日志

redolog:是存储引擎innodb层面的日志,binlog 是mysql server层面的,这样在数据库使用其他存储引擎的时候可以达到一致性的要求

redolog是物理日志,记录该数据页更新的内容,binlog是逻辑日志,记录的是这个数据更新的原始逻辑。

redolog是循环写,日志空间大小固定,binlog是追加写,是指一份写到一定大小的时候更换下一个文件,不会覆盖。

binlog可以作为恢复数据使用,主从复制搭建,redolog作为异常宕机,或者介质故障后的数据恢复使用。

undolog用来回滚行记录到某个版本,undolog一般是逻辑日志,根据每行记录进行记录。

**扩展:一条更新语句执行的顺序是什么?**

`update T set c = c + 1 where ID = 2;`

1. 执行器先查找引擎找到ID = 2 这一行,ID是主键,引擎直接使用树搜索找到这一行,如果ID = 2 这一行所在的数据页本来就在内存中,就直接返回给执行器,否则需要从磁盘读取到内存然后在返回。

2. 执行器拿到引擎给的行数据,把这个值进行 +1 ,比如原来是 N ,那么现在就是 N + 1。得到新的一行数据,然后再调用引擎提供个接口写入这行新数据。

3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到redolog中,此时redolog处于prepare状态,然后告知执行器执行完成了,随时可以提交事物,

4. 然后执行器生成这个操作的binlog,并把binlog写入磁盘。

5. 执行器调用引擎的提交事务接口,引擎把刚刚谢日的redolog改成commit状态,更新完成。 

正文到此结束