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

【MySQL | 第一篇】 深入理解三大日志(undo Redo Bin)

目录Undo Log日志Redo Log日志Redo Log与Bin Log的区别Bin Log日志三大日志全流程Undo Log日志一、核心定义UndoLog是MySQL InnoDB存储引擎特有的事务回滚日志核心作用是记录事务执行前的数据版本用于事务回滚、MVCC实现是InnoDB事务原子性、一致性的核心保障。二、核心作用事务回滚事务执行失败/手动ROLLBACK时通过Undo Log还原数据到执行前状态保证事务要么全部成功要么全部失败。MVCC实现快照读一致性非锁定读读取历史数据版本避免读写阻塞提升并发性能。崩溃恢复数据库崩溃重启时利用Undo Log回滚未提交事务保证数据一致性。三、存储结构与类型1. 存储位置不单独存文件存储在InnoDB的共享表空间ibdata1或独立undo表空间。分为回滚段Rollback Segment默认128个回滚段每个回滚段管理多个Undo Log。2. 两种类型1INSERT Undo Log仅记录INSERT操作的反向信息删除插入的行。事务提交后立即删除无MVCC复用价值因为是新数据没有历史undo log链条。2UPDATE Undo Log记录UPDATE/DELETE操作的旧数据版本。事务提交后不立即删除保留供MVCC读取历史版本由purge线程异步清理。四、工作原理1. 事务执行流程事务开始InnoDB分配Undo Log空间。执行DMLINSERT/UPDATE/DELETE先写Undo Log记录旧数据。再修改Buffer Pool中的数据页。事务提交INSERT Undo Log直接删除。UPDATE Undo Log标记为可清理等待purge线程回收。事务回滚读取Undo Log执行反向操作还原数据。2. MVCC实现原理每行数据隐含trx_id事务ID、roll_pointer回滚指针。roll_pointer指向Undo Log中的历史版本链。快照读时根据事务ID读取对应版本无需加锁。五、Purge线程清理机制1. 作用异步清理已提交、无活跃事务引用的UPDATE Undo Log释放空间。2. 触发条件事务提交后Undo Log标记为可清理。系统空闲时purge线程批量清理。3. 影响清理不及时会导致Undo Log膨胀占用磁盘空间影响性能。Redo Log日志redo log重做日志是 InnoDB 存储引擎独有的物理日志核心作用保证事务持久性、崩溃恢复、提升写入性能是 InnoDB 实现 ACID 中D持久性的关键。一、作用崩溃恢复MySQL 宕机重启后通过 redo log 恢复未刷盘的脏页数据避免数据丢失。提升写入性能事务提交时先写 redo log顺序写再异步刷脏页到磁盘随机写顺序写远快于随机写。保证持久性只要 redo log 落盘事务就“持久化成功”即使内存数据丢失也能恢复。二、内容数据页的物理修改如“在第100号数据页的第20个偏移量写入值10”。每条redo记录由“表空间号数据页号偏移量修改数据长度具体修改的数据”组成三、两阶段写入WAL 机制声明两阶段写入WAL两阶段提交prepare commit 不一样WALWrite-Ahead Logging预写日志先写日志再写数据。(说的是磁盘阶段先落盘日志再刷盘数据页)事务修改数据 → 内存中修改脏页未刷盘。生成 redo log → 写入 redo log buffer。事务提交 → redo log buffer 刷入磁盘commit 必须落盘。后台线程异步将脏页刷入磁盘。这里所说的脏页是在缓冲池中的数据页本质先改内存中的数据在写内存中的redo log之后先刷盘log最后再异步刷盘数据三、组成buffer 磁盘文件1. redo log buffer内存临时存放 redo log。刷盘时机事务提交默认innodb_flush_log_at_trx_commit1必刷。每秒后台线程刷一次。buffer 满 1/2 时自动刷。2. redo log file磁盘固定大小、循环使用的日志文件。两个关键指针write pos 是当前记录的位置一边写一边后移checkpoint是当前要擦除的位置也是往后推移可用空间 write pos ~ checkpoint写满则阻塞写入等待 checkpoint 推进。四、刷盘策略补充的是三中的redo log buffer内存决定 redo log 落盘强度直接影响性能 vs 数据安全1默认性能低最安全每次事务提交redo log 必刷磁盘fsync不丢数据。2性能和安全居中提交时写入操作系统文件缓存每秒刷一次磁盘MySQL挂了不丢操作系统宕机可能丢 1 秒数据。0高性能不安全仅后台线程每秒刷盘MySQL/OS 宕机都可能丢数据。Redo Log与Bin Log的区别特性redo logbinlog引擎InnoDB 独有MySQL 服务层所有引擎通用日志类型物理日志数据页修改逻辑日志SQL/行变化作用崩溃恢复主从复制、数据恢复写入方式循环写固定大小追加写无限增长写入时机事务执行中持续写事务提交时一次性写关键写入内存时机redo log执行时写 bufferbin log执行时写 cache→两者都是边执行边写内存写入磁盘时机最大区别redo log随时刷后台 / 满了 / 提交bin log必须提交才刷事务未提交时redo log可能已经刷盘bin log绝对不会刷盘崩溃时redo log可恢复未提交事务崩溃恢复bin log未提交事务不会存在因为没刷盘Bin Log日志bin log是 MySQL 记录所有数据库结构变更、数据修改的二进制日志不记录查询类操作一、作用数据恢复通过 bin log 回滚误操作、恢复到指定时间点主从复制主库将 bin log 发给从库从库重放实现数据同步审计追溯数据库的所有修改操作二、记录内容只记录写操作INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、TRUNCATE 等不记录读操作SELECT、SHOW、DESC 等记录事务提交InnoDB 事务提交后才写入 bin log保证一致性三、三种记录格式1. STATEMENT语句级默认早期记录执行的 SQL 语句优点日志量小、性能好缺点不确定函数NOW()、UUID()、RAND()、存储过程会导致主从数据不一致2. ROW行级推荐记录每行数据的变更修改前/后的值优点主从绝对一致、恢复精准缺点日志量大、批量操作如 UPDATE 全表日志暴增3. MIXED混合普通 SQL 用 STATEMENT不确定函数用 ROW兼顾性能与一致性折中方案四、刷盘策略关键参数 sync_binlog1每次提交事务都会执行fsync0每次提交事务都只write由系统自行判断什么时候执行fsyncN每次提交事务都write但累积N个事务后才fsync五、主从复制主库事务提交 → 写入 bin logdump 线程读取 bin log发送给从库从库IO 线程接收 → 写入relay logSQL 线程读取 relay log → 重放 SQL从库数据与主库一致六、日志文件组成二进制日志文件mysql-bin.000001、mysql-bin.000002… 写满自动滚动索引文件mysql-bin.index记录所有 bin log 文件名列表三大日志全流程伪代码BEGIN; UPDATE ...; INSERT ...; COMMIT;一、BEGIN事务开始InnoDB 分配Undo Log 空间事务开始状态活跃、未提交此时无 prepare无 commit无 Bin Log只有 Undo Log 准备好二、执行 UPDATE ...顺序Undo → 改内存 → Redo写 Undo LogUPDATE 类型记录修改前的旧数据用于回滚 MVCC修改 Buffer Pool 数据页在内存中是数据本身的缓存区和日志无关写 Redo Log Buffer普通 redo不是 prepare记录物理修改还没落盘只是内存三、执行 INSERT ...同样顺序Undo → 内存 → Redo写 Undo LogINSERT 类型修改 Buffer Pool写 Redo Log Buffer此时事务仍未提交无 prepare无 commit无 Bin Log只有 Undo Log、Redo Log Buffer、内存数据四、执行 COMMIT最关键两阶段提交只有执行 COMMIT才会进入 prepare→ binlog → commit第1步Redo prepare准备提交Redo Log 标记为prepare事务进入提交中状态此时还不算提交成功第2步写 Bin Log落盘把整个事务的逻辑操作写入 Bin LogBin Log 必须落盘成功此时仍不算提交成功第3步Redo commit真正提交Redo Log 标记为commit这一刻事务才算真正提交成功不可回滚五、提交完成后INSERT Undo Log立即删除UPDATE Undo Log保留等待 purge 线程清理Redo Log后台刷盘Bin Log追加写入永久保留数据页后台刷盘六、崩溃时怎么判断数据库在COMMIT过程中崩溃重启后 InnoDB 会执行崩溃恢复先扫描 Redo Log找出所有 “未收尾” 的事务筛选出3类事务Redo Log 标记为 commit事务已完成两阶段提交Redo Log 标记为 prepare事务卡在提交过程中只完成 prepare没到 commit无 prepare/commit 标记事务只执行了 DML 没触发 commit属于 “未提交事务”对于上面3类事务对应下面的三种情况Redo Log 标记为 commit判断事务已完全提交Bin Log已写成功否则到不了commit 阶段处理执行Redo Log 重做把修改同步到磁盘Redo Log 标记为 prepare校验 Bin Log检查 Bin Log 中是否有该事务的完整记录通过事务 ID 匹配✅Bin Log 有该事务说明 “写 Bin Log” 步骤已完成只是没来得及写 Redo commit处理InnoDB 会补全 Redo commit 标记然后重做 Redo Log最终提交事务❌Bin Log 无该事务说明 “写 Bin Log” 步骤没完成就崩溃了处理用 Undo Log 回滚该事务恢复到修改前的状态无 prepare/commit 标记只执行了 DML 没触发 commit判断事务从未进入提交流程属于未提交事务处理用 Undo Log 直接回滚恢复数据到事务执行前的状态补充“Redo prepare → 写 Bin Log → Redo commit” 的顺序是硬约束只有 Bin Log 落盘成功才会执行 Redo commit所以 “Redo commit” 一定意味着 Bin Log 已写成功无需再校验Bin Log 是 “最终证据”MySQL 保证Bin Log 写成功 事务可以安全提交Bin Log 没写成功 事务必须回滚否则主从复制会丢数据Undo Log 只用于回滚只有 “Bin Log 无记录” 或 “未进入提交流程” 的事务才会触发 Undo Log 回滚七、总结BEGIN → 写 Undo → 改内存 → 写 Redo普通 COMMIT → Redo prepare → 写 Bin Log → Redo commit真正提交 崩溃prepare 看 Bin Log有就提交无就回滚上述内容也同步在我的飞书欢迎访问https://my.feishu.cn/wiki/QLauws6lWif1pnkhB8IcAvkhncc?fromfrom_copylink如果我的内容对你有帮助请点赞评论收藏。创作不易你们的支持就是我坚持下去的动力

相关文章:

【MySQL | 第一篇】 深入理解三大日志(undo Redo Bin)

目录 Undo Log日志 Redo Log日志 Redo Log与Bin Log的区别 Bin Log日志 三大日志全流程 Undo Log日志 一、核心定义 Undo Log 是MySQL InnoDB存储引擎特有的事务回滚日志,核心作用是记录事务执行前的数据版本,用于事务回滚、MVCC实现,是…...

浪潮服务器硬盘红灯报警?手把手教你更换RAID阵列故障盘(附同步失败解决方案)

浪潮服务器硬盘红灯报警全流程处置指南:从故障诊断到阵列重建 当浪潮服务器的硬盘指示灯突然亮起刺眼的红色,大多数运维人员的第一反应往往是心头一紧。这种视觉警报不仅意味着硬件故障,更可能预示着数据丢失的风险。不同于普通PC的硬盘故障…...

Comsol热流耦合拓扑优化:最大化放热量与功率耗散的探索

Comsol热流耦合拓扑优化。 目标函数采用最大化放热量和功率耗散。在工程领域,热流耦合问题一直是研究的重点,尤其是如何通过拓扑优化来实现特定目标,比如最大化放热量和功率耗散,这对于提高系统性能至关重要。而Comsol作为一款强大…...

macOS Sequoia 15.7.5 (24G624) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.7.5 (24G624) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia/ 查看最新版。原创作品,转载请保留…...

机票价格智能监控:如何用Flight Spy锁定最佳购票时机

机票价格智能监控:如何用Flight Spy锁定最佳购票时机 【免费下载链接】flight-spy Looking for the cheapest flights and dont have enough time to track all the prices? 项目地址: https://gitcode.com/gh_mirrors/fl/flight-spy 你是否曾在预订机票时陷…...

OpenClaw 小龙虾Windows10 专属一键部署教程|10 分钟搞定本地 AI 数字员工

适配系统:Windows10 64 位(纯小白友好版) 核心优势:免命令行、免环境配置、解压即装,内置所有运行依赖,全程可视化操作,新手也能一次成功部署 2026 爆火的开源 AI 智能体! 本文专属…...

从零开始:SpaCy安装与模型下载的完整流程(含版本查询技巧)

从零开始:SpaCy安装与模型下载的完整流程(含版本查询技巧) 自然语言处理(NLP)正在改变我们与计算机交互的方式,而SpaCy作为这一领域的明星工具库,以其高效性和易用性赢得了众多开发者的青睐。无…...

LuckyLilliaBot:NTQQ的终极OneBot协议插件完整指南

LuckyLilliaBot:NTQQ的终极OneBot协议插件完整指南 【免费下载链接】LuckyLilliaBot NTQQ的OneBot API插件 项目地址: https://gitcode.com/gh_mirrors/li/LuckyLilliaBot LuckyLilliaBot是一个基于TypeScript开发的NTQQ插件,为QQ客户端提供完整的…...

智能排错助手:让快马AI分析你的openclaw安装错误并生成解决方案

最近在折腾openclaw这个工具时,遇到了不少安装报错的问题。作为一个经常在各类开发环境中摸爬滚打的程序员,我发现这类开源工具的安装过程往往隐藏着不少坑。不过这次尝试用AI辅助诊断后,整个排错效率提升了不少,这里记录下我的实…...

最近帮实验室刚入门的师弟复现了西储大学轴承故障的迁移学习代码,本来以为是手到擒来的活,结果还是踩了好几个坑,刚好整理出来给同样摸鱼入门的小伙伴参考

一区top轴承故障诊断迁移学习代码复现 故障诊断代码 复现首先使用一维的cnn对源域和目标域进行特征提取,域适应阶段:将源域和目标域作为cnn的输入得到特征,然后进行边缘概率分布对齐和条件概率分布对齐,也就是进行JDA联合对齐。此…...

塔罗牌选框架:准确率超机器学习模型

技术选型困境与创新突破在软件测试领域,技术栈选择一直是核心挑战。传统方法依赖历史数据和机器学习模型,但常陷入“预测陷阱”——过度依赖过往经验导致创新盲区。例如,自动化测试框架的错误选型每年造成巨额损失:38.7%源于技术生…...

2026 年智慧工地排名榜单第一|山东建安物联科技有限公司

2026 年度智慧工地综合实力榜单正式揭晓,山东建安物联科技有限公司(大建安)凭借标准引领、技术实力与标杆项目,登顶全国榜首,成为行业公认的智慧工地领军企业。公司打造的中建八局烟台崆峒胜境项目,获评国家…...

如何快速上手TradingView图表库:15+框架完整集成实战指南

如何快速上手TradingView图表库:15框架完整集成实战指南 【免费下载链接】charting-library-examples Examples of Charting Library integrations with other libraries, frameworks and data transports 项目地址: https://gitcode.com/gh_mirrors/ch/charting-…...

Excel 技巧:一键批量填充空值

🚀 操作步骤选中区域首先,用鼠标选中包含空值的目标数据区域。定位空值按下快捷键 Ctrl G 打开“定位”对话框:点击左下角的 「定位条件...」。选择 「空值」。点击「确定」。✅ 此时,区域内所有空白单元格已被高亮选中。输入公式…...

NaViL-9B效果展示:电商主图自动提取卖点文案+竞品对比分析

NaViL-9B效果展示:电商主图自动提取卖点文案竞品对比分析 1. 多模态大模型惊艳登场 想象一下,当你上传一张商品图片,AI不仅能准确识别图片内容,还能自动生成吸引人的卖点文案——这就是NaViL-9B带来的革命性体验。作为原生多模态…...

Python 3.13 + CUDA 13.0编译轮子

核心工具链安装 1、安装 Visual Studio 2022 (勾选 “使用 C 的桌面开发”) 2、安装 CUDA Toolkit 13.0环境变量注入 在终端执行,确保编译器能精准定位 CUDA 路径:set CUDA_PATHD:\Program Files\NVIDIA_GPU_Computing_Toolkit\v13 set PATH%CUDA_PATH%\…...

League Akari:英雄联盟玩家的终极智能辅助工具实战指南

League Akari:英雄联盟玩家的终极智能辅助工具实战指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否厌倦了在…...

AI赋能安装流程:快马智能诊断工具,自动解决软件安装兼容性问题

在开发软件的过程中,安装环节往往是第一个拦路虎。特别是当遇到系统环境复杂、依赖库版本冲突、权限配置等问题时,传统的安装方式常常让人头疼不已。最近我在尝试开发一个智能安装问题诊断工具时,发现InsCode(快马)平台的AI辅助功能特别实用&…...

南京四季旅游攻略:最美时节去最美地方

南京四季旅游攻略:最美时节去最美地方 🌸🍃🍂❄️本文作者:南京码农 发布日期:2026年3月26日 关键词:南京旅游、四季景点、旅游攻略、南京必去、季节推荐前言:南京,一座四…...

ESP32 SPI性能调优指南:从80MHz时钟到DMA配置,避开那些坑

ESP32 SPI性能调优实战:突破80MHz时钟与DMA配置的终极指南 当你在ESP32项目中遇到SPI通信速度瓶颈时,是否曾为如何突破80MHz时钟限制而苦恼?是否在配置DMA时踩过各种坑?本文将带你深入ESP32 SPI性能优化的核心领域,从硬…...

AI+医疗从模型到产品:做一个真正可用系统,需要跨过哪些坎?

# AI医疗从模型到产品:做一个真正可用系统,需要跨过哪些坎?做 AI医疗的人,常常会经历一个很像的阶段。前期我们把大部分精力放在模型上:换 backbone、调 loss、做多模态融合、补校准、压错误样本,最后终于把…...

如何用dpkg-architecture解决Debian软件包的多架构依赖问题?

深度解析dpkg-architecture:Debian多架构依赖管理的实战指南 在Debian软件包开发领域,多架构支持一直是开发者面临的复杂挑战之一。随着ARM架构的崛起和异构计算场景的普及,单一架构的软件包已经无法满足现代计算需求。本文将带您深入探索dpk…...

从零部署JetLinks社区版:一站式物联网平台本地化搭建实战

1. JetLinks社区版:物联网开发的瑞士军刀 第一次接触JetLinks社区版是在三年前的一个智能家居项目上。当时客户要求两周内搭建一个能管理5000设备的物联网平台,还要支持自定义协议开发。在对比了多个开源方案后,JetLinks的模块化设计让我眼前…...

解锁Navicat密码:突破加密限制的开源解密工具

解锁Navicat密码:突破加密限制的开源解密工具 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 当数据库连接密码被Navicat加密保存却无法记起&…...

模电小白必看:3种基本放大电路实战对比(附电路图+避坑指南)

模电入门实战:三大基础放大电路深度解析与避坑指南 刚接触模拟电路时,面对共射极、共集极和共基极这三种基本放大电路,很多初学者都会感到困惑——它们看起来相似,但特性却大不相同。本文将用面包板搭建的真实电路和示波器实测波形…...

深入解析服务器License管理:从基础命令到实战应用

1. 服务器License管理:为什么它比你想的更重要 如果你管理过服务器,尤其是那些运行着像CAD、EDA、仿真分析这类专业软件的服务器,那你肯定对“License”这个词不陌生。它就像软件的“通行证”,没有它,再强大的硬件也只…...

纺织抗菌,选对材料才关键

在纺织行业中,抗菌消臭性能是提升产品附加值的核心抓手,其中贴身衣物、家纺等贴身类产品,因长期接触人体或所处环境特性,细菌滋生、异味残留等问题尤为突出。DN128抗菌消臭剂作为高效无机消臭材料,可广泛用作面料及家纺…...

5分钟玩转OpenClaw:nanobot镜像云端体验与本地调试对比

5分钟玩转OpenClaw:nanobot镜像云端体验与本地调试对比 1. 为什么需要对比云端与本地两种体验方式 作为一个长期折腾AI工具的开发者,我最近在测试OpenClaw时遇到了一个典型困境:是直接在本地电脑安装全套环境,还是先用云端沙盒快…...

JAVA重点基础、进阶知识及易错点总结(10)Map 接口(HashMap、LinkedHashMap、TreeMap)

&#x1f680; Java 巩固进阶 第10天 主题&#xff1a;Map 接口深度解析 —— 键值对的高效艺术&#x1f4c5; 进度概览&#xff1a;掌握 Java 中最灵活的数据结构。 &#x1f4a1; 核心价值&#xff1a; 动态数据承载&#xff1a;SpringBoot 中接收前端动态参数 (Map<Stri…...

vue新手福音:快马ai帮你秒建可运行环境,专注学习第一行代码

作为一个刚接触Vue的新手&#xff0c;最让我头疼的就是环境搭建。记得第一次尝试安装Node.js、配置npm、理解脚手架的时候&#xff0c;光是解决各种报错就花了大半天时间。直到发现了InsCode(快马)平台&#xff0c;才明白原来入门可以这么简单。 环境搭建的痛点 传统方式需要先…...