MySQL-redo log, undo log, binlog
redo log(重做日志)#
- 定义:物理日志,记录数据页的修改操作,InnoDB引擎层特有
- 作用:
- 减少每次更新操作都要写磁盘造成IO 成本、查找成本较高,利用WAL(Write-Ahead Logging)技术,先写日志,再写磁盘
- 有crash-safe能力,当数据库发生异常时,之前提交的记录也不会丢失
- 数据结构:循环链表,首尾相连,大小固定,写满会先清空再写
innodb_flush_log_at_trx_commit
:设置为1时,每次事务的redo log都直接持久化到磁盘。innodb_log_files_in_group
:控制几个redo log文件,取值范围是1~4
binlog(归档日志)#
- 定义:逻辑日志,记录SQL的动作,Server层实现,所有引擎都可使用
- 作用:用来归档
- 数据结构:链式结构,追加写
sync_binlog
:设置为1时,每次事务的 binlog 都持久化到磁盘
undo log(回滚日志)#
- 定义:物理日志,记录事务中每次数据更新前的状态
- 作用:主要用于保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚。是MVCC (多版本并发控制) 实现的关键
- 数据结构:默认存放在共享表空间 ibdata
- innodb_max_undo_log_size:控制最大 undo tablespace 文件的大小,当启动了 innodb_undo_log_truncate 时,undo tablespace 超过 innodb_max_undo_log_size 阀值时才会去尝试 truncate。该值默认大小为 1G,truncate 后的大小默认为 10M。
- innodb_undo_tablespaces:设置 undo 独立表空间个数,范围为 0-128,5.7 版本默认为 0,0 表示不开启独立 undo 表空间。该参数只能在最开始初始化 MySQL 实例的时候指定。
- innodb_undo_directory:设置 undo 表空间的存放目录,默认数据目录。
- innodb_undo_log_truncate:设置 undo 表空间是否自动截断回收。该参数生效的前提是,已设置独立表空间且独立表空间个数大于等于 2 个。
relay log(中继日志)#
- 定义:物理日志。主从同步需要的中间产物
- 作用:用来主从同步间,从库记录从主库同步过来的binlog日志的一个临时日志
两阶段提交#
数据库内核月报-MySQL · 源码分析 · 内部 XA 和组提交

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程