mysql 更新语句的执行流程(mysql实战45讲笔记)
mysql执行更新语句时, 涉及到两种日志redo log(重做日志)和binlog(归档日志)。
- redo log是InnoDB引擎特有的,拥有crash-safe能力:数据库发生异常重启,之前提交的记录都不会消失。binlog是MySQL服务层实现的,所有引擎都可以使用。
- redo log是物理日志,记录在数据页上的修改;binlog是逻辑日志,记录语句的原始逻辑。
- redo log大小固定、循环写,binlog可以追加写。
通过“两阶段提交”,可以让数据库恢复到任意时刻的数据。
“两阶段提交”,是指把redo log拆成prepare和commit状态:引擎更新数据到内存后,将更新操作记录到redo log中,redo log处于prepare状态;执行器把该操作的binlog写入磁盘,调用引擎的提交事务接口,引擎把redo log改成commit状态。更新完成。