MySQL · 单选题 · 第 37 题
Java 后端开发面试 · 第 37 题
MySQL 提交事务时对 redo log 和 binlog 采用两阶段提交,目的是?
- A把一次写入拆成两步来执行,让单条 SQL 的写入速度大约提高一倍
- B给 MVCC 提供两个不同的数据版本,用来实现可重复读隔离级别
- C让读请求和写请求分别走两个阶段,以此实现主库和从库的读写分离与负载均衡
- D保证 redo log 和 binlog 一致,避免崩溃恢复后主库与从库的数据不一致
答案
D D. 保证 redo log 和 binlog 一致,避免崩溃恢复后主库与从库的数据不一致
解析
流程是:redo log 写入并标记为 prepare,接着写 binlog,最后把 redo log 标记为 commit。崩溃恢复时,如果 redo 处于 prepare 且 binlog 完整就提交,否则回滚。如果没有两阶段提交,可能出现主库因 redo 恢复了数据,但 binlog 里没有,从库就少了这笔数据。