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状态,更新完成。
正文到此结束
- 本文标签: 其他
- 本文链接: http://www.ityoulove.com/article/5
- 版权声明: 本文由崔健宇原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权