一、redo log工作原理
生意红火的时候 | 酒店老板思路 | mysql设计思路 |
1.先写到粉板上面 | 1.WAL(Write-Ahead Logging) 先写日志 | |
2.等打烊后账本翻出来核算 | 2.WAL(Write-Ahead Logging) 在写磁盘 | |
今天账特别多粉板写满了 | 1.把黑板上一部分账单更新到账本 | 1.当 checkpoint被追上的时候,不执行更新操作 停下来处理一些记录 推进checkpoint |
2.把那些记录擦掉 | 2.从头开始写 循环写 |
有了redo log InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe
二、重要的日志模块:binlog
1.和redo log的区别
redo是物理的,binlog是逻辑的;现在由于redo是属于InnoDB引擎,所以必须要有binlog,因为你可以使用别的引擎
redo log | binlog |
InnoDB 引擎独有 | mysql server层实现的,所有引擎都可以使用 |
物理日志,某个数据页做了什么修改(存储了数据被修改的值) | 逻辑日志,记录语句的原始逻辑 |
循环写,空间固定会用完 | 追加写入,不覆盖原有日志 |
三、Update语句执行流程
四、两阶段提交
1、保证数据库的一致性:
必须要保证2份日志一致,使用的2阶段式提交;其实感觉像事务,不是成功就是失败,不能让中间环节出现,也就是一个成功,一个失败
如果有一天mysql只有InnoDB引擎了,有redo来实现复制,那么感觉oracle的DG就诞生了,物理的速度也将远超逻辑的,毕竟只记录了改动向量