redo log
MySQL中的redo log(重做日志)是实现WAL(预写式日志)技术的关键组件,用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事,可以形象地解释redo log的工作原理和其在MySQL中的作用。
工作原理
- 粉板(redo log)
MySQL中的redo log充当了酒店掌柜的粉板角色。当有数据更新操作时,InnoDB引擎首先将这些变更写入到redo log中,并同时更新内存。这一步完成后,更新操作即视为完成。这个过程非常快,因为写入redo log通常比直接更新磁盘上的数据要快得多。
- 账本(磁盘数据文件)
与掌柜的账本类似,MySQL中的磁盘数据文件存储了数据库的持久状态。在系统空闲时,或者当redo log快满时,InnoDB会将redo log中记录的变更同步到磁盘上的数据文件中,确保数据的持久化。
- WAL技术
即Write-Ahead Logging,其核心思想是先记录日志(即先写redo log),再将数据持久化到磁盘上。这样做的好处是提高了数据更新的效率,并且通过redo log可以在数据库异常重启后恢复未持久化的数据变更,保证数据的完整性。
循环使用
- redo log空间是固定的&