MySQL的日志undolog、binlog、redolog

1. 日志层次

binlog是Server层,undolog和redolog是innodb引擎层特有的。

2. 记录了什么 & 作用

binlog

记录了所有数据库结构变更和表数据修改的SQL日志。

主要用于数据备份和主从复制,比如误删数据了可以用binlog找回。

undolog

如下图,记录了每一条记录的数据版本信息。

主要用于事务回滚和MVCC(能读取记录的哪个版本)。

ACID的原子性。

redolog

记录了表空间号+数据页号+偏移量+修改数据长度+具体修改的数据。(数据在内存中修改后,还没刷回盘时的记录的地方)

作用帮助数据刷回盘,掉电故障恢复。

ACID的持久性。

3. 更新操作会发生什么

这里忽略操作系统层面上的page cache,把过程简化为内存和磁盘两个维度。

  • 将数据页从磁盘读入到buffer pool。
  • 开启事务
    • 记录buffer pool中的undo页;将undo页的修改更新到redolog buffer中
    • 更新内存中的数据页,标记为脏页;将数据页的修改更新redolog buffer中
    • 记录该语句到binlog cache中
  • 提交事务
    • 主动将redolog buffer的内容写到redolog中
    • 将binlog cache的内容写到binlog中
  • 操作系统在合适的时间将redolog的内容写到磁盘

只要写到redolog buffer(提交事务之前),可能会被1s执行一次后台线程刷新到redolog,或者写入量大于redolog buffer的一半。

参考:https://xiaolincoding.com/mysql/log/how_update.html

相关推荐
红海云29 分钟前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba34 分钟前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭1 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-1 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang1 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
海绵宝宝转agent2 小时前
MySql高频面试八股开源笔记总结
mysql·面试·开源
geovindu2 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠3 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
余槐i3 小时前
数据没回滚也不报错:@Transactional 自调用失效的 3 种复现与修复
spring boot·mysql·多线程·spring 事务
EatFan3 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架