下文还是白日梦以自导自演的方式,围绕“组提交”展开本话题。看看你能抗到第几问吧
换一种写作风格,自导自演面试现场!感觉这样还是比较有趣的,欢迎大家订阅我的MySQL专题,公众号首发!持续更新中~
点击阅读原文,格式会好看一点哦~
点击阅读原文,格式会好看一点哦~
点击阅读原文,格式会好看一点哦~
公众号后台回复:数据库 可以参与抽奖活动,3本《MySQL技术内幕-InnoDB存储引擎》
欢迎关注白日梦,公众号首发!持续连载中
库尼奇瓦
,同学,听说你上一面表现的还可以,这一面要不咱继续?嗯,好啊!
好,你了解MySQL的两阶段提交不?说说看
嗯,了解。
简单来说两阶段提交就是将事务提交分成两部分,经过这两步处理后,我们称这个事务被提交了。嗯,那两个阶段呢?你说说看!
可以看下面这张图:我们当执行commit命令时,会按照如下进行。
第一阶段:写redo log,并标识上prepare。
-- 中间穿插写binlog --
第二阶段:写redo log,完成事务的最终提交。
嗯,那你知不知道为什么事务的提交要分成两个阶段?
嗯,你看上图中的两阶段是redolog-prepare、redolog-commit这两个阶段,然后在这两个阶段中又写了binlog。
这个redolog主要提供的能力是对事务进行rollback、并且redolog是存储引擎层面记录的日志。
而binlog的作用是方面我们进行数据的备份以及MySQL集群主从之间的数据同步使用,并且binlog是MySQL上层,也就是Server层面记录的日志。
综上:MySQL的两阶段提交是为了保证redolog、binlog两者在逻辑上的一致性。才能进一步保证。事务的回滚、数据备份、已经MySQL集群之间的数据才是安全可靠的
嗯,那你能不能举个例子,更直观的告诉我,redolog、binlog两者在逻辑一致的必要性以及用途?
嗯,好啊!
,比如这个例子: