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

MySQL undo log,redo log和bin log日志文件的生成时间点、层级归属、存储位置及生命周期详解

问题:

假如库名叫做A库,表名叫B表,undo log,redo log和bin log,这些日志文件的生成的时间点是什么?是在mysql的哪一层生成的?哪些文件是有buffer的?哪些日志文件是存在磁盘上的?哪些存在内存中?另外如果有buffer,那这个buffer什么时候刷盘的,他会一直存在还是什么时候会被清除掉?如果存在磁盘上,那么它的名字叫什么?如果存在磁盘上,那他是会一直存在还是说什么时候会被清除掉?

答案:

涉及库名 A 和表名 B 的日志行为与全局日志机制一致,日志本身不按库表独立存储

MySQL 日志文件的生成时间点、层级归属、存储位置及生命周期详解

1. Undo Log

生成时间点:

存储位置

文件名/结构

生命周期

内存

Undo Log Buffer

事务执行期间暂存 Undo Log 条目,提交后可能保留(支持 MVCC)

磁盘

undo_001、undo_002(独立 Undo Tablespace,MySQL 8.0+ 默认)或 ibdata1(系统表空间,旧版本)

- 通过 Redo Log 间接保护持久性。

- 事务提交后,Undo Log 段可能被回收(若不被 MVCC 或长事务依赖)。

  • 事务修改数据时:执行 INSERT/UPDATE/DELETE 前生成,用于事务回滚和 MVCC。

  • 层级归属:存储引擎层(InnoDB)。

    存储与生命周期:
Buffer 刷盘时机:
  • 间接刷盘:Undo Log 的修改会先写入 Redo Log Buffer,事务提交时根据 innodb_flush_log_at_trx_commit 决定 Redo Log 刷盘,从而间接保证 Undo Log 的持久性。

  • 清理机制:后台 Purge 线程异步清理不再需要的 Undo Log。

2. Redo Log

生成时间点:

存储位置

文件名/结构

生命周期

内存

Redo Log Buffer

事务执行期间暂存 Redo Log 条目,提交时根据配置刷盘。

磁盘

ib_logfile0、ib_logfile1(默认文件名)

- 循环写入,日志空间重复利用。

- Checkpoint 推进后,旧日志可被覆盖。

  • 数据页修改时:每次数据页变更(如 UPDATE)生成物理日志,确保崩溃恢复。

  • 层级归属:存储引擎层(InnoDB)。

    存储与生命周期:
Buffer 刷盘时机:
  • 事务提交时:若 innodb_flush_log_at_trx_commit=1,提交时同步刷盘。

  • 每秒异步刷盘:若 innodb_flush_log_at_trx_commit=0/2,由后台线程每秒刷盘。

  • Buffer 清理:刷盘后 Redo Log Buffer 空间可复用。

3. Bin Log

生成时间点:

存储位置

文件名/结构

生命周期

内存

Binlog Cache(每个线程独立)

事务执行期间暂存 Binlog 条目,提交时根据配置刷盘。

磁盘

mysql-bin.000001(默认前缀)

- 按顺序写入,文件大小达 max_binlog_size 后切换新文件。

- 根据 expire_logs_days 自动清理过期文件。

  • 事务提交时:记录逻辑操作(如 SQL 语句或行变更),用于主从复制和逻辑恢复。

  • 层级归属:服务层(Server Layer)。

    存储与生命周期:
Buffer 刷盘时机:
  • 事务提交时:若 sync_binlog=1,提交时同步刷盘。

  • 依赖 OS 刷盘:若 sync_binlog=0,由操作系统决定刷盘时机。

  • Buffer 清理:事务提交后 Binlog Cache 立即释放。

4. 日志文件总结

日志类型

生成时间点

生成层级

内存 Buffer

磁盘文件

Buffer 刷盘时机

磁盘文件清理机制

Undo Log

事务修改数据时

存储引擎层(InnoDB)

Undo Log Buffer

undo_001 或 ibdata1

随 Redo Log 刷盘间接持久化

Purge 线程清理(无长事务阻塞)

Redo Log

数据页修改时

存储引擎层(InnoDB)

Redo Log Buffer

ib_logfile0、ib_logfile1

提交时或每秒刷盘(依赖配置)

Checkpoint 推进后循环覆盖

Bin Log

事务提交时

服务层

Binlog Cache

mysql-bin.000001 等

提交时或依赖 OS(依赖配置)

按 expire_logs_days 自动清理过期文件

5. 注意事项(可能存在版本差异)

  1. Undo Log 存储位置:

    • MySQL 8.0+ 默认使用独立 Undo Tablespace(undo_001),旧版本可能存储在 ibdata1。

  2. Bin Log 格式:

    • 支持 Statement、Row、Mixed 格式,文件名固定前缀为 mysql-bin。

  3. Redo Log 文件大小:

    • 由 innodb_log_file_size 和 innodb_log_files_in_group 控制,默认 2 个文件循环使用。

6. 总结

  • Undo Log:事务修改时生成,存储引擎层管理,内存缓冲后通过 Redo Log 间接持久化,磁盘文件可独立或共享。

  • Redo Log:数据变更时生成,存储引擎层管理,内存缓冲后按配置刷盘,磁盘文件循环覆盖。

  • Bin Log:事务提交时生成,服务层管理,内存缓冲后按配置刷盘,磁盘文件按时间或大小清理。

建议配置:

  • 高安全场景:innodb_flush_log_at_trx_commit=1 + sync_binlog=1。

  • 高性能场景:innodb_flush_log_at_trx_commit=2 + sync_binlog=0(需容忍少量数据丢失风险)。

相关文章:

  • Apache DolphinScheduler系列1-单节点部署及测试报告
  • ASP.NET Core 8.0学习笔记(二十八)——EFCore反向工程
  • React + TypeScript 复杂布局开发实战
  • 存储引擎、索引、SQL优化(MySQL笔记第四期)
  • Dashboard-frps
  • 【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介
  • 算法-数据结构(图)-DFS深度优先遍历
  • Cesium@1.126.0,创建3D瓦片,修改样式
  • 微信小程序网络请求与API调用:实现数据交互
  • Part-DB部署
  • 探索浮点数在内存中的存储(附带快速计算补码转十进制)
  • 网易云音乐分布式KV存储实践与演进
  • 博客系统完整开发流程
  • 观成科技:海莲花“PerfSpyRAT”木马加密通信分析
  • RK3399 Android10双WiFi功能实现
  • ubuntu+aarch64+dbeaver安装【亲测,避坑】
  • low rank decomposition如何用于矩阵的分解
  • Jenkins protoc: command not found
  • Redis面试题----Redis 的持久化机制是什么?各自的优缺点?
  • 计算机毕业设计SpringBoot+Vue.js中小型医院网站(源码+文档+PPT+讲解)
  • 受关税政策影响,沃尔玛将上调部分商品在美售价
  • 韶关一企业将消防安装工程肢解发包,广东住建厅:罚款逾五万
  • 车建兴被留置:跌落的前常州首富和红星系重整迷路
  • 普京召开俄乌谈判筹备会议,拉夫罗夫、绍伊古等出席
  • 上海锦江乐园摩天轮正在拆除中,预计5月底6月初拆完
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》