面试题答案
一键面试MySQL利用事务日志保证数据持久化特性的原理
- 事务日志记录机制:MySQL使用重做日志(Redolog)和回滚日志(Undolog)。重做日志记录数据的物理修改,例如某一页数据的修改。回滚日志记录数据修改前的版本,用于事务回滚。
- 写入策略:采用Write-Ahead Logging(WAL)原则,即先将日志写入磁盘的日志文件,再将数据修改持久化到数据文件。当事务提交时,并不一定立即将数据刷新到磁盘,但日志一定已经落盘。这样保证即使系统崩溃,已提交事务的修改不会丢失,从而实现数据的持久化。
崩溃恢复场景下事务日志的作用
- 分析阶段:MySQL启动时,会扫描重做日志,构建两个列表,一个是需要重做的事务列表(包含所有已提交但尚未完全持久化到数据文件的事务),另一个是需要回滚的事务列表(包含所有未提交的事务)。这个过程依据日志中的事务状态信息(如事务开始、提交、回滚标记)来确定。
- 重做阶段:按照日志记录的顺序,对需要重做的事务列表中的事务进行重做操作。重做日志记录了数据修改的物理操作,MySQL依据这些记录将数据恢复到崩溃前已提交事务结束时的状态。例如,若日志记录了对某一页数据的修改,MySQL会重新执行该修改操作。
- 回滚阶段:对需要回滚的事务列表中的事务,依据回滚日志进行回滚。回滚日志记录了修改前的数据版本,MySQL通过这些记录将数据恢复到事务开始前的状态,撤销未提交事务对数据的修改。