当前位置: 首页 > article >正文

MySQL 事务的二阶段提交是什么?

两阶段提交Two-Phase Commit, 2PC是分布式事务或跨存储引擎事务中为了保证数据一致性Atomicity而采用的一种协议。在 MySQL 中2PC 最典型的应用场景是InnoDB 存储引擎与 Redo Log重做日志和 Binlog二进制日志之间的协作。1. 为什么需要两阶段提交在 MySQL 中为了兼顾性能和可靠性采用了双日志机制Redo Log (InnoDB 特有)作用保证事务的持久性Crash-safe。即使数据库崩溃重启后也能通过 Redo Log 恢复未刷盘的数据。特点循环写入写入性能极高顺序写但只记录“在某个数据页上做了什么修改”不记录 SQL 逻辑。Binlog (Server 层通用)作用用于主从复制和数据恢复逻辑备份。特点追加写入记录 SQL 逻辑或行变更是逻辑日志。问题所在如果这两个日志的写入不是原子的就会发生数据不一致场景 ARedo Log 写成功了但 Binlog 写失败了或崩溃了。结果重启后InnoDB 通过 Redo Log 恢复了数据但 Binlog 里没有这条记录。主从复制时从库没有这条数据导致主从数据不一致。场景 BBinlog 写成功了但 Redo Log 写失败了或崩溃了。结果重启后InnoDB 发现没有 Redo Log认为事务未提交数据回滚。但 Binlog 里却有这条记录。如果基于 Binlog 恢复会错误地插入这条数据导致数据错误。解决方案必须保证Redo Log和Binlog要么同时成功要么同时失败。这就是两阶段提交2PC存在的意义。2. 两阶段提交的具体流程MySQL 的 2PC 将事务提交过程分为两个阶段Prepare准备阶段和Commit提交阶段。第一阶段Prepare准备阶段事务执行完毕所有数据修改已写入内存Buffer Pool。InnoDB 引擎将 Redo Log 写入磁盘状态标记为prepare预提交。此时Redo Log 中记录了事务 ID但事务尚未正式提交。关键点此时如果数据库崩溃重启后 InnoDB 会检查 Redo Log。如果是prepare状态InnoDB 会去检查 Binlog 是否完整。Server 层收到 InnoDB 的prepare成功信号后开始写入Binlog。Binlog 写入是追加写一旦写入即持久化。第二阶段Commit提交阶段如果Binlog 写入成功Server 层通知 InnoDB 引擎执行Commit。InnoDB 将 Redo Log 的状态从prepare更新为commit。事务正式结束数据对外可见。如果Binlog 写入失败Server 层通知 InnoDB 引擎执行Rollback。InnoDB 回滚事务Redo Log 标记为无效。事务结束数据不对外可见。3. 崩溃恢复机制Crash Recovery2PC 的核心价值在于崩溃恢复。当 MySQL 重启时InnoDB 会扫描 Redo Log根据日志状态决定如何处理Redo Log 状态Binlog 状态恢复动作原因Commit任意提交事务已完全提交无需检查 Binlog。Prepare完整存在提交说明 Binlog 写成功了只是 Redo Log 还没刷成 commit。为了保持主从一致必须提交。Prepare不存在/损坏回滚说明 Binlog 没写成功或崩溃在 Binlog 写入前。为了数据一致性必须回滚否则主从会不一致。关键点InnoDB 在恢复prepare状态的事务时会去检查对应的 Binlog 文件。如果 Binlog 里能找到该事务的记录就提交找不到就回滚。这保证了Redo Log和Binlog的严格一致性。4. 2PC 的优缺点优点数据强一致性完美解决了 Redo Log 和 Binlog 不一致的问题保证了主从复制的数据准确性。Crash-safe即使数据库在事务提交的任何中间环节崩溃重启后也能自动恢复到一致状态不会丢失数据也不会产生脏数据。缺点性能开销事务提交需要写两次磁盘Redo Log 写一次Binlog 写一次且中间有状态切换。相比单阶段提交增加了 I/O 次数和锁持有时间。阻塞风险在 Prepare 阶段事务持有的锁不会释放。如果 Binlog 写入慢或网络延迟会导致事务长时间持有锁可能引发死锁或性能下降。单点故障在分布式数据库如 MySQL Cluster 或基于 2PC 的分布式事务中如果协调者Coordinator在第二阶段崩溃参与者Participant可能会一直阻塞在 Prepare 状态直到超时。5. 如何优化或关闭 2PC在 MySQL 中有一个参数sync_binlog和innodb_flush_log_at_trx_commit会影响 2PC 的性能和安全性但2PC 协议本身是默认开启且无法关闭的为了保证数据一致性。但是可以通过调整参数来平衡性能sync_binlog 1(默认最安全)每次事务提交都强制刷盘 Binlog。配合 2PC性能最低但最安全。sync_binlog N每 N 次事务提交刷盘一次 Binlog。性能提升但崩溃可能丢失 N 次 Binlog配合 2PC 可能导致主从短暂不一致但重启后 InnoDB 会回滚未刷 Binlog 的事务所以数据最终一致只是主从延迟。innodb_flush_log_at_trx_commit 1(默认)每次事务提交都刷 Redo Log。注意在 MySQL 5.7 和 8.0 中引入了Group Commit组提交机制极大地优化了 2PC 的性能。原理多个并发事务在 Prepare 阶段完成后不会立即去写 Binlog而是等待一小段时间将多个事务的 Binlog 合并成一次磁盘 I/O 写入。效果在高并发场景下显著减少了磁盘 I/O 次数提升了吞吐量同时保持了 2PC 的一致性。总结MySQL 的两阶段提交是连接InnoDB 存储引擎和Server 层 Binlog的桥梁。核心目的确保 Redo Log 和 Binlog 的原子性防止主从数据不一致。流程先写 Redo Log (Prepare) - 再写 Binlog - 最后写 Redo Log (Commit)。恢复重启时根据 Redo Log 的prepare状态和 Binlog 的存在与否决定提交还是回滚。代价牺牲了一定的写入性能换取了数据的绝对安全。对于绝大多数生产环境强烈建议保持 2PC 开启不要为了性能关闭它否则主从复制的数据一致性将无法保证。

相关文章:

MySQL 事务的二阶段提交是什么?

两阶段提交(Two-Phase Commit, 2PC) 是分布式事务或跨存储引擎事务中,为了保证数据一致性(Atomicity)而采用的一种协议。 在 MySQL 中,2PC 最典型的应用场景是 InnoDB 存储引擎与 Redo Log(重做…...

信奥赛网课怎么选?2026高性价比机构实测对比

一、信奥赛:升学赛道升温,选对网课少走弯路在科技素养升学的大趋势下,信息学奥赛(信奥赛)早已成为小升初科技特长生、初升高自主招生、高考强基计划的重要加分项。从CSP-J/S入门认证,到NOIP、NOI等高阶赛事…...

腾讯云COS临时密钥避坑指南:SpringBoot权限配置的5个致命细节

腾讯云COS临时密钥安全实践:SpringBoot权限配置的五大核心策略 在云存储服务中,临时密钥(STS)作为替代永久密钥的安全方案,已成为企业级应用的标准配置。然而,许多开发团队在实施过程中往往低估了权限粒度的…...

Qwen3-14B常见问题解决:max_new_tokens参数设置详解

Qwen3-14B常见问题解决:max_new_tokens参数设置详解 1. 问题背景与重要性 在使用Qwen3-14B这类大型语言模型时,max_new_tokens参数的正确设置直接影响模型输出的完整性和系统稳定性。很多用户在实际部署中会遇到以下典型问题: 生成的文本在…...

ATmega32U4高精度PWM调光类Dimmer设计与实现

1. ATmega32U4 PWM调光器类(Dimmer Class)技术深度解析ATmega32U4作为一款集成USB控制器的高性能8位AVR微控制器,广泛应用于人机交互设备、USB HID外设及智能照明控制模块。其片上定时器资源丰富,支持多路高精度PWM输出&#xff0…...

别再为实体重叠头疼了!用PyTorch+Transformers复现Casrel模型搞定联合抽取

用PyTorchTransformers实战Casrel模型:破解实体重叠难题的工程指南 当处理"姚明在火箭队打球"这类文本时,"姚明"既是球员实体又与公众人物实体重叠——这正是知识图谱构建中最棘手的实体重叠问题。传统流水线方法(先抽实…...

Nanbeige 4.1-3B快速上手指南:支持<think>标签的像素化思考日志实操手册

Nanbeige 4.1-3B快速上手指南:支持标签的像素化思考日志实操手册1. 环境准备与快速部署 1.1 系统要求 操作系统:支持Windows 10/macOS 12/主流Linux发行版Python版本:3.8-3.10(推荐3.9)GPU配置:至少8GB显…...

qt项目总结

绘制圆弧 文字组合(仪表盘)void paintEvent(QPaintEvent* event){Q_UNUSED(event);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 1. 绘制背景圆弧painter.save();painter.setPen(QPen(QColor(255, 255, 255), 4));p…...

wan2.1-vae镜像免配置部署:supervisorctl一键管理+日志排查+端口诊断全流程

wan2.1-vae镜像免配置部署:supervisorctl一键管理日志排查端口诊断全流程 1. 平台介绍 muse/wan2.1-vae是基于Qwen-Image-2512模型的AI图像生成平台,它能够将文字描述转化为高质量的视觉图像。这个平台特别适合需要快速生成创意图像的设计师、内容创作…...

嵌入式多核C调度器上线即崩溃?紧急修复方案:3行__DMB指令+2个编译属性+1次TLB flush(已在STM32H753量产验证)

第一章:嵌入式多核C调度器上线即崩溃的典型现象与根因定位嵌入式多核系统中,C语言实现的轻量级调度器在首次启动(boot-up)阶段即发生硬故障(Hard Fault)、非法指令异常(UsageFault)或…...

c# 特性

1.c# 特性在 C# 中,特性 (Attributes) 是一种强大的机制,允许你将元数据(Metadata)声明性地附加到代码元素上(如类、方法、属性、参数、程序集等)。这些元数据可以在运行时通过反射 (Reflection) 读取&…...

威纶通触摸屏模板,直接打开就可以用,可根据自己要求修改, 威纶通触摸屏,全部图库

威纶通触摸屏模板,直接打开就可以用,可根据自己要求修改, 威纶通触摸屏,全部图库。刚拿到威纶通触摸屏项目的时候,最头疼的就是从零开始画界面。直到我发现他们家的官方模板库,简直像打开了新世界——直接解…...

Odoo 19 库存模块之期初库存导入概述

Odoo 19 库存模块期初库存概述 有效的库存管理对任何企业都至关重要,因为它直接影响运营、现金流和客户满意度。 对于正在实施 Odoo 19 或开启新会计期间的企业而言,设置准确的期初库存是库存管理中最基础、最关键的一步。 期初库存是指企业在新期间开始…...

运维人中间危机,我转型网安的逆袭之路,别慌有出路

2023年春节后的第一个工作日,我攥着9K的薪资条站在茶水间,看着新来的95后运维同事,他本科毕业两年,薪资却比我高3K。领导找我谈话时那句"基础运维岗位竞争太激烈",像一记闷棍敲醒了我。 我每天要重复着服务…...

最近在研究基于扰动观测器的直流电机调速系统,发现这玩意儿挺有意思的。先不说那些复杂的理论,直接上点干货,看看怎么用代码和仿真模型来实现这个系统

基于扰动观测器的直流电机调速系统, 有计算公式,仿真模型,仿真结果,ad电路图,程序首先,我们得有个直流电机的模型。假设电机的状态方程是这样的: % 电机状态方程 A [0 1; -k/J -b/J]; B [0; 1…...

Hot100-验证二叉搜索树

错误代码:/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {…...

MCP集成效率提升300%:基于VS Code 1.89+最新Extension API重构的轻量接入方案(仅需12行核心代码)

第一章:MCP集成效率提升300%:基于VS Code 1.89最新Extension API重构的轻量接入方案(仅需12行核心代码)VS Code 1.89 引入了全新的 vscode.mcp 模块与声明式注册机制,彻底替代了传统事件监听手动协议解析的冗余模式。开…...

JavaScript设计模式(一):单例模式实现与应用

先提出一个问题,为什么要学习设计模式? 难道是提出一个代码形容词,是为了让代码看起高大上 or 装逼? 先看下设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。 我的个人理解就是&#xff…...

5.4.1 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web)基本信息核心设计目标现实意义

基本信息 全称:World Wide Web,简称 WWW、Web、万维网发明者:Tim Berners-Lee(蒂姆・伯纳斯 - 李)诞生时间:1989 年提出,1991 年正式发布核心机构:W3C(万维网联盟&#x…...

协作机器人厂商华沿启动招股:创始团队深耕行业逾20年,国际化进程提速

雷递网 雷建平 3月20日广东华沿机器人股份有限公司(简称:“华沿机器人”,股票代码为:“1021”)日前通过上市聆讯,准备2025年3月30日在港交所上市。华沿机器人今日开启招股,拟全球发售8078.5万股…...

嵌入式系统多核任务调度失效全解析(从Cache一致性崩溃到优先级反转的底层真相)

第一章:嵌入式系统多核任务调度失效全解析(从Cache一致性崩溃到优先级反转的底层真相)在多核嵌入式系统中,任务调度失效往往并非源于算法逻辑错误,而是根植于硬件行为与软件抽象之间的隐性鸿沟。当多个CPU核心共享L2/L…...

联邦学习后门攻击实战:如何用符号翻转绕过现有防御机制?

联邦学习安全攻防实战:符号翻转攻击的隐蔽渗透与防御策略 联邦学习作为分布式机器学习的前沿范式,正在医疗、金融等领域快速落地。但2023年AAAI会议的最新研究表明,一种名为"符号翻转"的新型后门攻击能有效穿透现有防御体系——当攻…...

嵌入式C语言编程规范:工程化实践与自动化落地

1. 嵌入式C语言编程规范的工程实践解析嵌入式系统开发中,代码质量远不止于功能正确性。在资源受限、可靠性要求严苛、维护周期长达十年以上的工业场景中,编程规范直接决定着项目的可维护性、可测试性与长期演进能力。本文不讨论“哪种风格更美观”&#…...

rosclean的使用:

ROS将节点的日志输出(如控制台消息、错误、警告等)存储在~/.ros/log/目录下。随着时间的推移,这些文件会占用大量磁盘空间。如何使用rosclean修复:ROS提供了一个便捷的命令行工具rosclean来管理这些日志。检查当前磁盘使用情况ros…...

漏洞扫描是怎么进行的?什么是漏洞扫描?

漏洞扫描是怎么进行的?什么是漏洞扫描? 漏洞扫描 一、漏洞扫描的含义 1.漏洞扫描是一种网络安全工具,用于检测计算机系统、网络设备和应用程序中存在的安全漏洞和漏洞。这些漏洞可能会被黑客利用,从而导致系统被入侵、数据泄露或…...

AD域策略实战:构建企业终端安全基线

1. 企业终端安全基线的核心价值 企业终端设备往往是安全防线中最薄弱的环节。根据Verizon《2023年数据泄露调查报告》,超过80%的安全事件始于终端设备。AD域策略作为企业IT管理的"中枢神经系统",能够将零散的安全配置转化为系统化的防御体系。…...

关于MiniMax token plan套餐购买优惠

minimax token plan目前作为性价比最高的大模型套餐,9折优惠邀请码链接:🚀 MiniMax Token Plan 惊喜上线!新增语音、音乐、视频和图片生成权益。邀请好友享双重好礼,助力开发体验! 好友立享 9折 专属优惠 …...

EMC工程师保命 Checklist

这是从经典EMC教材里扒出来的精华知识点,改了点工程师看得懂的人话,帮你在设计阶段就把坑踩完,别等到测试室里熬夜改到脱发。每条都是血的教训,打勾就行,别问为什么,问就是上次有人没做这个,改了三版才过认证。 一、PCB布局与布线篇:别让你的画板变成干扰的温床 1. 功…...

Java代码规范示例:用户管理实战

以下是一段符合Java编码规范的代码示例,实现了简单的用户信息管理功能,包含类定义、方法封装及注释规范:/*** 用户信息实体类,包含基础属性和操作逻辑* 遵循JavaBean规范,使用Lombok简化代码*/ Data AllArgsConstructo…...

漫画脸描述生成惊艳案例:水墨风角色+留白意境+题诗风格生成能力

漫画脸描述生成惊艳案例:水墨风角色留白意境题诗风格生成能力 1. 引言:当二次元遇见水墨风 你有没有想过,如果动漫角色穿上水墨画的衣裳,会是什么样子? 传统的二次元角色设计,我们见惯了日系萌系的明亮色…...