
第 4 章 故障解析
351
第二阶段(commit 阶段):写 binlog 并将其标记为 commit 状态。
两阶段写日志的意义?
你有没有想过这样一件事,binlog 默认都是不开启的!
也就是说,如果你根本不需要 binlog 带给你的特性,那你根本就用不着让 MySQL 写 binlog,也用不着
什么两阶段提交。
只用一个 redolog 就够了。无论你的数据库如何 crash,redolog 中记录的内容总能让你 MySQL 内存中
的数据恢复成 crash 之前的状态。
所以说,两阶段提交的主要用意是:为了保证 redolog 和 binlog 数据的安全一致性(划重点!!!拐杖
敲黑板 3 次)。只有在这两个日志文件逻辑上高度一致了。你才能放心的使用 redolog 帮你将数据库中
的状态恢复成 crash 之前的状态,使用 binlog 实现数据备份、恢复、以及主从复制。而两阶段提交的机
制可以保证这两个日志文件的逻辑是高度一致的。没有错误、没有冲突。
排查陷入僵局
看到这里我们就发现两阶段提交保证了 redolog 和 binlog 数据的安全一致性,binlog 里进行 commit,r
edolog 里一定是成功的也就是说:
根本不可能出现写了 binlog 但并没有写 redo-log 的情况,完全不会出现小明描述的那样的问题。
经过反复思考,真実(しんじつ)は いつも ひとつ 平假名:しんじつはいつもひとつ(真相只有一个)。
那就是描述信息里有遗漏,在更新后和查询前必定有一个事务对这个记录进行了操作。
文档被以下合辑收录
评论