参考答案
结论:MySQL数据落盘遵循WAL(写前日志),由InnoDB的redo log、binlog及buffer pool协同。流程:1.数据页读入buffer pool,修改在内存;2.写redo log(物理逻辑日志)到prepare状态,刷盘策略由innodb_flush_log_at_trx_commit控制;3.写binlog(逻辑日志)到磁盘;4.redo log置commit,事务完成;5.脏页由后台线程异步刷盘,配合double write buffer防半写。崩溃恢复:未提交事务用undo回滚,已提交但未刷盘用redo重放,binlog用于主从同步。对比:redo保引擎持久,binlog保server层归档与复制。