为什么 redo log 具有 crash-safe 的能力,是 binlog 无法替代的?
为什么 redo log 具有 crash-safe 的能力,是 binlog 无法替代的?
我来答
添加附件
收藏
复制链接
微信扫码分享

在小程序上查看
分享
添加附件
问题补充
2条回答
默认
最新
第一点:redo log 可确保 innoDB 判断哪些数据已经刷盘,哪些数据还没有
redo log 和 binlog 有一个很大的区别就是,一个是循环写,一个是追加写。也就是说 redo log 只会记录未刷盘的日志,已经刷入磁盘的数据都会从 redo log 这个有限大小的日志文件里删除。binlog 是追加日志,保存的是全量的日志。 当数据库 crash 后,想要恢复未刷盘但已经写入 redo log 和 binlog 的数据到内存时,binlog 是无法恢复的。虽然 binlog 拥有全量的日志,但没有一个标志让 innoDB 判断哪些数据已经刷盘,哪些数据还没有。 但 redo log 不一样,只要刷入磁盘的数据,都会从 redo log 中抹掉,因为是循环写!数据库重启后,直接把 redo log 中的数据都恢复至内存就可以了。
复制
第二点:如果 redo log 写入失败,说明此次操作失败,事务也不可能提交
redo log 每次更新操作完成后,就一定会写入日志,如果写入失败,说明此次操作失败,事务也不可能提交。 redo log 内部结构是基于页的,记录了这个页的字段值变化,只要crash后读取redo log进行重放,就可以恢复数据。 这就是为什么 redo log 具有 crash-safe 的能力,而 binlog 不具备。
复制


打赏 0

展开全部评论(8条)
回答交流
Markdown
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
添加图片链接
上传图片
导航目录
Markdown语法参考
请输入正文
提示
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
