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

MySql 三大日志(redolog、undolog、binlog)详解

在这里插入图片描述![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/aa730ab3f84049638f6c9a785e6e51e9.png


1. redo log:“你他妈别丢数据啊!”

干啥的?
这货是InnoDB的“紧急备忘录”。比如你改了一条数据,MySQL怕自己突然断电嗝屁了,数据没存到硬盘上,所以它先把你的操作草草写个纸条(redo log),回头再慢慢往硬盘里塞。

咋工作的?

  • 写数据时:你改数据,先扔到内存的Buffer Pool里(内存快啊!),但内存一断电就凉了。所以InnoDB立马在redo log buffer里记一笔:“用户xxx在xx时间把id=1的数据从100块改成了200块”。
  • 提交事务时:这纸条(redo log)会被刷到硬盘的ib_logfile文件里(这就是持久化)。哪怕这时候MySQL崩了,重启后也能拿着这纸条把没存完的数据补上。

为啥叫redo?
因为它是“重做日志”——万一数据没存完,就按这日志重新搞一遍,保证数据不丢。
吐槽:这货就是个“备胎”,平时不显山露水,关键时刻(比如崩溃恢复)才出来擦屁股。


2. undo log:“我他妈还能反悔!”

干啥的?
这货是“后悔药”。比如你改了一条数据,结果突然想撤回(ROLLBACK),或者别人在读旧版本数据(MVCC),就靠undo log把数据倒带回去

咋工作的?

  • 改数据前:InnoDB会先把旧数据复制一份,存到undo log里,比如“id=1的数据原本是100块”。
  • 回滚时:直接拿undo log里的旧数据覆盖回去,假装啥都没发生。
  • 持久化?:undo log也会写到硬盘(ibdata或.ibd文件),因为MySQL崩了也得能回滚啊!

吐槽:这玩意儿就是个“时光机”,专治手贱改错数据。但副作用是——占地方(尤其是长事务不提交,undo log会越堆越多,最后硬盘爆炸)。


3. binlog:“老子要搞主从复制!”

干啥的?
这货是MySQL Server层的“广播员”。不管用啥存储引擎(InnoDB、MyISAM),只要改了数据,binlog就会记下来,方便之后主从同步或者数据恢复

咋工作的?

  • 写数据时:比如你执行一个UPDATE,Server层会生成一条binlog,记录“在xx时间执行了啥SQL”。
  • 提交事务时:binlog会刷到硬盘的binlog文件里(比如mysql-bin.000001)。
  • 和redo log的关系?:这俩货要搞“两阶段提交”(2PC),保证数据一致性。
    • Prepare阶段:redo log写完了,但标个“待定”。
    • Commit阶段:binlog写完了,再给redo log标个“确认”。
      这样就算中间崩了,MySQL也能根据这俩日志判断该提交还是回滚。

吐槽:binlog就是个“大喇叭”,主库干了啥,从库都得跟着学。但写这玩意儿慢的一批(尤其是sync_binlog=1时,每次提交都刷盘),所以高并发时容易成瓶颈。


总结对比:

redo logundo logbinlog
谁家的InnoDB亲儿子InnoDB亲儿子MySQL Server层的干儿子
存啥物理日志(在哪个页改了啥)逻辑日志(旧数据长啥样)逻辑日志(执行的SQL语句)
干啥用崩溃恢复(保数据)回滚+MVCC(保一致性)主从同步+数据恢复(保逻辑)
吐槽“硬盘不够?循环覆盖!”“长事务我***弄死你!”“sync_binlog=1?你硬盘是SSD吗!”

最后一句忠告

  • 想不丢数据?redo log和binlog一个都不能少(除非你心大)。
  • 想不卡死?别开长事务,不然undo log能把你硬盘塞成砖头。
  • 想主从不翻车?binlog用ROW格式,别用Statement(鬼知道SQL里有啥骚操作)。

完事儿!

http://www.xdnf.cn/news/28783.html

相关文章:

  • ubuntu24.04上使用qemu+buildroot+uboot+linux+tftp+nfs模拟搭建vexpress-ca9嵌入式linux开发环境
  • 关于viewpager常见的泄漏
  • 部署rocketmq集群
  • django基于爬虫的网络新闻分析系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 【PyTorch】colab上跑VGG(深度学习)数据集是 CIFAR10
  • B端APP设计:打破传统限制,为企业开启便捷新通道
  • 软件架构分层策略对比及Go项目实践
  • 深度解析 SOA:架构原理、核心优势与实践挑战
  • 2025年渗透测试面试题总结-拷打题库06(题目+回答)
  • LeetCode每日一题4.19
  • 【Bluedroid】蓝牙存储模块配置管理:启动、读写、加密与保存流程解析
  • sqlilabs-Less之HTTP头部参数的注入——基础篇
  • [HCIP] OSPF 综合实验
  • Vue3+TS中svg图标的使用
  • 数据分析与挖掘
  • RAGFlow在Docker中运行Ollama直接运行于主机的基础URL的地址
  • opencv 给图片和视频添加水印
  • leetcode57.插入区间
  • Windows系统C盘深度清理指南
  • 车载诊断新架构--- SOVD初入门(上)
  • 23种设计模式-创建型模式之原型模式(Java版本)
  • 医疗器械电磁兼容相关标准
  • 豆瓣图书数据采集与可视化分析(一)- 豆瓣图书数据爬取
  • 性能比拼: Deno vs. Node.js vs. Bun (2025版)
  • C++之虚函数 Virtual Function
  • Redis 的持久化机制(RDB, AOF)对微服务的数据一致性和恢复性有何影响?如何选择?
  • 零基础上手Python数据分析 (18):Matplotlib 基础绘图 - 让数据“开口说话”
  • FPGA——基于DE2_115实现DDS信号发生器
  • FPGA IO引脚 K7-认知4
  • 【java实现+4种变体完整例子】排序算法中【插入排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格