获得徽章 0
- bin log 与 redo log差异点:
①存储内容不同:redo log是物理日志,存储的是数据页上的操作信息,bin log是逻辑日志,存储的是原始的语句逻辑,如给“ ID=2 这一行的 c 字段加 1 ”。
②存储方式不同:redo log是循环写,空间固定会用完,bin log是追加写,写满了会切换到写一个页(需要定期手动清理,避免占用过多磁盘空间)。
③适用范围不同:redo log是innodb引擎特有的,bin log是mysql的server层实现,所有引擎都可用。
2.小知识:最早mysql默认的存储引擎是myisam,只有bin log(用于归档,没有crash_save能力),没有redo log。innodb是另一家公司以插件的形式引入mysql。使用redo log来实现crash_save能力。
3.两阶段提交,事务提交过程:
①.先写redo log,将其状态变为prepare状态,这步已经将唯一标识事务的xid写入。
②.再写bin log。
③.事务提交,将redo log状态变更为commit。
理解:以bin log为基础,如果在步骤二之前崩溃,因为处于prepare阶段,所以redo log的xid会到bin log中匹配,结果没匹配上,就会回滚。如果在步骤三之前崩溃,此时redo log 的xid在bin log中匹配到了,就会执行第三个步骤,将事务提交。展开评论2
!![[我想静静]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_74.d954f2d.png)
![[奸笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_17.bcebf79.png)