MySQL 到底有多少种日志?一次讲清 redo、undo、binlog 的区别

19 阅读4分钟

MySQL 有多少种日志

Note

如果按 DBA 和面试里最常见的口径来讲,MySQL 常见日志主要包括:
redo logundo logbinlogerror logslow query loggeneral logrelay log

一、先给结论

MySQL 里常被提到的日志主要有 7 类:

  1. redo log
  2. undo log
  3. binlog
  4. error log
  5. slow query log
  6. general log
  7. relay log

如果是从“核心必懂”的角度来记,最重要的是前 5 类:

  • redo log
  • undo log
  • binlog
  • error log
  • slow query log

二、按功能分类来记

Tip

不要死记硬背日志名字,最好按“用途”来分组记忆。

1. 事务与恢复相关

  • redo log
  • undo log

2. 复制与归档相关

  • binlog
  • relay log

3. 运维排障相关

  • error log
  • slow query log
  • general log

三、每种日志是干什么的

1. redo log

作用:

  • 主要用于崩溃恢复
  • 保证事务的持久性

理解方式:

  • 事务提交了,但数据页还没来得及真正刷盘
  • 如果这时 MySQL 宕机,可以靠 redo log 把已提交事务恢复出来

一句话记忆:

  • redo log 是“重做日志”,解决“已经提交的数据别丢”

2. undo log

作用:

  • 用于事务回滚
  • 支撑 MVCC

理解方式:

  • 一个事务修改了数据,但还没提交
  • 如果要回滚,就需要 undo log
  • 一致性读时,也会用到旧版本数据,这背后也离不开 undo log

一句话记忆:

  • undo log 是“回滚日志”,解决“怎么撤销”和“怎么看旧版本”

3. binlog

作用:

  • 记录数据变更的逻辑日志
  • 常用于主从复制
  • 也可用于数据恢复

理解方式:

  • binlog 记录的是“做了什么操作”
  • 例如插入、更新、删除等变更事件

一句话记忆:

  • binlog 是“归档和复制日志”,重点不在崩溃恢复,而在复制和追变更

4. error log

作用:

  • 记录 MySQL 启动、停止、运行错误、异常崩溃等信息

适用场景:

  • MySQL 启动失败
  • 插件加载失败
  • 实例异常退出
  • 某些内部报错定位

一句话记忆:

  • error log 是“出问题先看它”的日志

5. slow query log

作用:

  • 记录慢 SQL

适用场景:

  • 排查性能问题
  • 找执行时间长的 SQL
  • 做 SQL 优化

一句话记忆:

  • slow query log 是“性能排查第一入口”

6. general log

作用:

  • 记录所有连接和请求

特点:

  • 信息很全
  • 开销也大
  • 线上通常不会长期打开

一句话记忆:

  • general log 是“全量操作流水”,适合排查,不适合常开

7. relay log

作用:

  • 主从复制中,从库接收并保存主库的 binlog 事件

理解方式:

  • 主库写 binlog
  • 从库把拉下来的事件先写到 relay log
  • 然后再回放执行

一句话记忆:

  • relay log 是“从库复制中转站日志”

四、最容易混淆的 3 组区别

Warning

面试和日常工作里,最容易混的是 redo logundo logbinlog

1. redo log vs undo log

对比项redo logundo log
核心作用崩溃恢复回滚、MVCC
方向重做撤销
关注点已提交事务不丢未提交事务可撤回

2. redo log vs binlog

对比项redo logbinlog
所属层面InnoDB 引擎层MySQL Server 层
主要用途崩溃恢复主从复制、归档恢复
记录方式偏物理日志逻辑日志

3. binlog vs relay log

对比项binlogrelay log
位置主库从库
作用记录变更保存拉取到的主库变更并回放

五、面试里最常见的回答方式

如果别人问:

“MySQL 有多少种日志?”

你可以这样答:

Example

MySQL 常见日志主要有 redo logundo logbinlogerror logslow query loggeneral log 和 relay log
其中最核心的是 redo logundo log 和 binlog
redo log 负责崩溃恢复,undo log 负责回滚和 MVCC,binlog 主要用于主从复制和数据恢复。

这种答法的好处是:

  • 先报全日志种类
  • 再重点讲核心三件套
  • 结构清楚,不容易丢分

六、真正工作里最常用的是哪些

如果从 DBA 和线上排障角度看,最常打交道的通常是:

  • error log
  • slow query log
  • binlog

如果从数据库原理和面试角度看,最必须讲清楚的是:

  • redo log
  • undo log
  • binlog

七、记忆口诀

Success

可以这样记:

  • redo:已经提交,不能丢
  • undo:没提交,能撤回
  • binlog:记录变更,给复制和恢复用
  • error:报错先看
  • slow:慢 SQL 排查
  • general:全量流水
  • relay:从库中转

八、一句话总结

MySQL 常见日志可以分成三组:

  • 事务恢复:redo logundo log
  • 复制归档:binlogrelay log
  • 运维排障:error logslow query loggeneral log