两种日志
redo log
- InnoDB特有
- 物理日志,记录在某个数据页上做了什么修改
- 循环写,空间固定会用完,类似ringbuf
binlog
- mysql的server层实现的
- 逻辑日志,记录的是语句的原始逻辑
- 追加写,binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志
事务执行过程
事务执行简单过程:
- 更新内存
- 写入redolog,此时处于prepare阶段
- 写binlog
- 提交事务,此时处于commit状态
两阶段提交怎么保证redolog跟binlog逻辑一致的?
1 prepare阶段 2 写binlog 3 commit
在 2 之前 crash
重启恢复:发现没commit,回滚
备份恢复:没有binlog
在3之前crash
重启恢复:没有commit,单是prepare 和 binlog 逻辑一致
备份恢复:有binlog操作记录
所以直接commit即可