被面试官问住了,MySQL两阶段提交是什么鬼?

前言

MySQL通过两阶段提交的机制,保证了redo log和bin log的逻辑一致性,进而保证了数据的不丢失以及主从库的数据一致。

而说起两阶段提交,就不得不先介绍一下redo log和bin log。

redo log

redo log即重做日志,是InnoDB引擎特有的一种日志(有的面试官经常问到这一点)。

redo log主要做什么呢?

以更新数据为例,我们知道,MySQL的数据是存储在磁盘上的,如果每一次更新数据,都去磁盘寻址找到要更新的数据,进行更新操作的话,这个IO成本是非常高的。

如果是固态硬盘还好,如果是机械硬盘,那么MySQL的更新性能根本无法满足我们的业务需要。

所以,MySQL采用了一种叫做WAL的技术,Write-Ahead Logging。

当更新数据时,将更新操作(即某个数据页上做了什么修改)先写到redo log里面,然后更新内存,这个更新操作就算完成了。MySQL会在服务器空闲的时候,把redo log的操作记录刷新到磁盘里,以保持数据的一致性。

需要注意的是,redo log虽然也是磁盘上的一个文件,但是由于操作是顺序写,所以性能是非常高的。

当然了,redo log也是有大小上限的,不可能无限制的写入。

以上图为例,配置了4个redo log,write pos就是代表当前记录写到什么位置了,而check point表示一个推进点,它会不断的前移,做擦除数据的操作,以保证redo log可以不断的写入。

当然,擦除数据之前,会把redo log的记录刷新到磁盘。

通过redo log,可以保证即使MySQL发生异常重启,数据也不会丢失(因为redo log是物理日志,可以进行重放),这个特性就叫做crash-safe。

bin log

bin log是MySQL Server提供的一种日志,叫做归档日志,所有引擎都可以使用bin log。

那bin log和redo log的区别是什么呢?

1,这两种日志的提供者不同:bin log是由MySQL Server提供的,redo log是InnoDB引擎特有的。

2,redo log主要记录的是某个数据页做了什么修改,bin log记录的是语句的原始逻辑,比如更新了某一行的某个字段。

3,redo log是循环写的,数据会被覆盖。bin log是追加写,一个文件写满,就写下一个文件。

两阶段提交

介绍完了redo log和bin log,我们再看一下他们两者是如何配合完成两阶段提交的。

上图就是一个更新数据的流程,可以看到,在更新一条数据之前,MySQL会先将数据加载到内存,然后更新内存,开始写redo log。

此时,redo log处于prepare状态,等到bin log写完之后,再提交事务,这一条记录的更新操作就算完成了。

redo log prepare -> 写bin log -> redo log commit,这个流程就叫做两阶段提交。

下面我们分析一下,采用两阶段提交的好处。

情景一,redo log处于prepare状态时,如果写bin log失败了,那么更新失败,此时redo log没有commit,bin log也没有记录,两者的状态是一致的,没有问题。

情景二,redo log处于prepare状态时,写bin log成功,但是宕机导致commit失败了。此时bin log产生了记录,redo log没有写入成功,数据暂时不一致。

但是不用担心,当MySQL重启时,会检查redo log中处于prepare状态的记录。在redo log中,记录了一个叫做XID的字段,这个字段在bin log中也有记录,MySQL会通过这个XID,如果在bin log中找到了,那么就commit这个redo log,如果没有找到,说明bin log其实没有写成功,就放弃提交。

通过这样的机制,保证了redo log和bin log的一致性。

总结

之所以MySQL中既存在redo log,又存在bin log,这是因为bin log是MySQL Server提供的一种归档日志,其本身并不具备crash-safe能力。而redo log本身不具备归档能力,他是一种循环写的日志。

MySQL通过将这两种日志整合起来,并通过两阶段提交的机制,保证了数据的一致性。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/226003.html<

(0)
运维的头像运维
上一篇2025-04-17 04:13
下一篇 2025-04-17 04:15

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注