首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >避坑必看!MySQL 三大日志(redo/undo/binlog)底层原理全拆解,事务一致性再也不懵

避坑必看!MySQL 三大日志(redo/undo/binlog)底层原理全拆解,事务一致性再也不懵

作者头像
果酱带你啃java
发布2026-04-07 17:56:03
发布2026-04-07 17:56:03
7620
举报
概述
MySQL事务ACID的基石是redo、undo、binlog三大日志:redo log保障持久性(宕机不丢数据),undo log保障原子性(支持回滚与MVCC),binlog保障可追溯与主从同步。三者协同工作,缺一不可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、先搞懂核心:三大日志各自的“分工”
  • 二、详解redo log:事务持久性的“守护者”
    • 2.1 核心作用
    • 2.2 核心特性:循环写+固定大小
    • 2.3 写入机制(分步骤拆解)
      • 步骤1:事务执行时,写入redo log buffer(内存)
      • 步骤2:事务提交时,触发redo log刷盘(默认策略)
      • 步骤3:后台线程异步刷盘(补充)
      • 写入机制流程图
    • 2.4 刷盘策略(4种,重点记默认)
      • 关键提醒
    • 2.5 实例:验证redo log的作用(MySQL 8.0)
      • 步骤1:准备环境(创建表+插入初始数据)
      • 步骤2:修改数据,不提交事务(观察redo log buffer)
      • 步骤3:故意宕机(模拟MySQL异常崩溃)
      • 步骤4:重启MySQL,观察数据
      • 步骤5:重复步骤2-4,提交事务后宕机
    • 2.6 常见误区(避坑重点)
  • 三、详解undo log:事务原子性的“后悔药”
    • 3.1 核心作用
    • 3.2 核心特性:逻辑日志+可回滚
    • 3.3 写入机制(分步骤拆解)
      • 步骤1:事务开始时,创建undo段
      • 步骤2:执行修改操作时,同步写入undo log
      • 步骤3:事务回滚时,利用undo log 恢复数据
      • 步骤4:事务提交时,标记undo log 可回收
      • 写入机制流程图
    • 3.4 刷盘策略
    • 3.5 实例1:事务回滚(验证undo log的原子性保障)
      • 执行结果解析
    • 3.6 实例2:MVCC依赖undo log(验证历史版本读取)
      • 事务1(修改数据,不提交)
      • 事务2(读取数据,查看历史版本)
      • 事务1提交后,事务3读取
      • 原理解析
    • 3.7 常见误区(避坑重点)
  • 四、详解binlog:数据可追溯、主从同步的“核心”
    • 4.1 核心作用
    • 4.2 核心特性:追加写+不循环
    • 4.3 三种格式(重点记Row格式)
      • 1. Statement 格式(语句级)
      • 2. Row 格式(行级)
      • 3. Mixed 格式(混合级)
      • 格式对比表
    • 4.4 写入机制(分步骤拆解)
      • 步骤1:事务执行时,记录SQL操作到binlog cache(内存)
      • 步骤2:事务提交时,将binlog cache刷盘到binlog文件
      • 步骤3:binlog 文件滚动
      • 写入机制流程图
    • 4.5 刷盘策略(由sync_binlog控制,重点记1)
      • 关键提醒
    • 4.6 实例1:查看binlog文件,解析数据变更
      • 步骤1:开启binlog(默认开启,MySQL 8.0)
      • 步骤2:执行数据修改,查看binlog内容
      • 步骤3:解析binlog内容(Row格式)
      • 解析结果关键内容(简化)
    • 4.7 实例2:通过binlog恢复误删数据
      • 步骤1:找到误删操作对应的binlog位置
      • 步骤2:记录误删操作的起始和结束位置
      • 步骤3:执行binlog回放,恢复数据
      • 步骤4:验证恢复结果
    • 4.8 常见误区(避坑重点)
  • 五、三大日志协同工作:如何保证事务持久性与数据一致性?
    • 5.1 核心协同逻辑(事务提交全流程)
      • 流程图
      • 步骤详解(关键重点)
    • 5.2 宕机恢复时的协同逻辑
    • 5.3 主从同步时的协同逻辑
      • 架构图
      • 协同细节(重点)
    • 5.4 实例:Java + MyBatis-Plus 实战,验证三大日志协同(JDK 17)
      • 第一步:pom.xml 依赖
      • 第二步:application.yml 配置(双1配置,开启binlog)
      • 第三步:实体类(UserInfo)
      • 第四步:Mapper 接口(UserInfoMapper)
      • 第五步:Service 接口及实现(编程式事务)
      • 第六步:Controller 层(Swagger3 注解)
      • 第七步:启动类
      • 实例验证步骤
      • 协同逻辑解析
    • 5.5 易混淆点区分
  • 六、生产环境最佳实践
    • 6.1 生产环境核心参数配置(MySQL 8.0 官方推荐)
    • 6.2 三大日志的监控与运维规范
      • 6.2.1 核心监控指标
      • 6.2.2 强制运维规范
    • 6.3 数据恢复标准化流程
      • 6.3.1 场景1:MySQL宕机重启后的自动恢复流程
      • 6.3.2 场景2:误操作数据的标准化恢复流程(基于binlog)
    • 6.4 性能优化核心技巧
    • 6.5 高频生产事故避坑指南
    • 6.6 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档