MySQL 有多少种日志
Note
如果按 DBA 和面试里最常见的口径来讲,MySQL 常见日志主要包括:
redo log、undo log、binlog、error log、slow query log、general log、relay log。
一、先给结论
MySQL 里常被提到的日志主要有 7 类:
redo logundo logbinlogerror logslow query loggeneral logrelay log
如果是从“核心必懂”的角度来记,最重要的是前 5 类:
redo logundo logbinlogerror logslow query log
二、按功能分类来记
Tip
不要死记硬背日志名字,最好按“用途”来分组记忆。
1. 事务与恢复相关
redo logundo log
2. 复制与归档相关
binlogrelay log
3. 运维排障相关
error logslow query loggeneral 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 log、undo log、binlog。
1. redo log vs undo log
| 对比项 | redo log | undo log |
|---|---|---|
| 核心作用 | 崩溃恢复 | 回滚、MVCC |
| 方向 | 重做 | 撤销 |
| 关注点 | 已提交事务不丢 | 未提交事务可撤回 |
2. redo log vs binlog
| 对比项 | redo log | binlog |
|---|---|---|
| 所属层面 | InnoDB 引擎层 | MySQL Server 层 |
| 主要用途 | 崩溃恢复 | 主从复制、归档恢复 |
| 记录方式 | 偏物理日志 | 逻辑日志 |
3. binlog vs relay log
| 对比项 | binlog | relay log |
|---|---|---|
| 位置 | 主库 | 从库 |
| 作用 | 记录变更 | 保存拉取到的主库变更并回放 |
五、面试里最常见的回答方式
如果别人问:
“MySQL 有多少种日志?”
你可以这样答:
Example
MySQL 常见日志主要有 redo log、undo log、binlog、error log、slow query log、general log 和 relay log。
其中最核心的是 redo log、undo log 和 binlog:
redo log 负责崩溃恢复,undo log 负责回滚和 MVCC,binlog 主要用于主从复制和数据恢复。
这种答法的好处是:
- 先报全日志种类
- 再重点讲核心三件套
- 结构清楚,不容易丢分
六、真正工作里最常用的是哪些
如果从 DBA 和线上排障角度看,最常打交道的通常是:
error logslow query logbinlog
如果从数据库原理和面试角度看,最必须讲清楚的是:
redo logundo logbinlog
七、记忆口诀
Success
可以这样记:
redo:已经提交,不能丢undo:没提交,能撤回binlog:记录变更,给复制和恢复用error:报错先看slow:慢 SQL 排查general:全量流水relay:从库中转
八、一句话总结
MySQL 常见日志可以分成三组:
- 事务恢复:
redo log、undo log - 复制归档:
binlog、relay log - 运维排障:
error log、slow query log、general log