错误日志记录什么
错误日志是 MySQL 服务级的事件流水:启动与关闭过程、初始化参数问题、崩溃与重启原因、复制线程报错、死锁与表损坏提示都写在这里。它不记录每一条 SQL,因此排查慢查询要看慢日志,而排查「为什么起不来」「为什么复制断了」则必须先看错误日志,这是现场证据最集中的地方。
基本信息
| 适用平台 | MySQL 5.7 / 8.0、MariaDB |
|---|---|
| 位置查询 | SHOW VARIABLES LIKE 'log_error'; |
| 常见路径 | /var/log/mysqld.log 或数据目录下的 .err 文件 |
| 详细度参数 | log_error_verbosity:1 错误、2 加警告、3 加提示 |
| 无配置时 | 错误输出走 stderr,由 systemd 接管 |
典型使用场景
- 实例启动失败:确认是参数错误、权限问题还是数据文件损坏
- 实例意外重启:确认是 OOM 被杀还是崩溃退出
- 复制中断:查看 Applier 报错的具体事务与错误码
- 磁盘写满导致实例只读或拒绝写入时确认根因
- 定期巡检:发现被忽略的警告信息与废弃参数提示
查看日志
查看日志
mysql -uroot -p -e "SHOW VARIABLES LIKE 'log_error';"
tail -n 200 /var/log/mysqld.log # 看最近的启动与错误记录
grep -iE 'error|warn' /var/log/mysqld.log | tail -50
tail -f /var/log/mysql/error.log # 实时跟踪
# 未显式配置 log_error 时错误输出由 systemd 接管
journalctl -u mysqld --since '1 hour ago' | tail -50日志相关配置
日志相关配置
[mysqld]
log_error = /var/log/mysql/error.log
log_error_verbosity = 2 # 1=错误 2=+警告 3=+提示
log_error_services = log_filter_internal; log_sink_internal # 8.0 可配置输出组件
log_timestamps = SYSTEM # 时间戳用时区而非 UTC常见事件类型
| 日志内容 | 含义 | 处置方向 |
|---|---|---|
| Starting/Shutdown 记录 | 实例启动与关闭 | 核对是否为计划内操作 |
| InnoDB 恢复信息 | 异常关闭后的恢复过程 | 等待恢复完成,勿强行中断 |
| 复制线程报错 | Applier 中断与错误码 | 核对数据一致性后再跳过或重建 |
| 磁盘与权限错误 | 无法写日志或数据文件 | 检查挂载、权限与剩余空间 |
| 参数弃用警告 | 升级前的不兼容提示 | 按提示调整配置 |
MySQL 8.0 若未显式配置 log_error,错误输出走 stderr 并由 systemd 接管:此时文件里看不到内容,要用 journalctl -u mysqld 查看,排查前先确认日志到底写到哪里。
日志目录的属主或权限不正确会直接导致实例启动失败,而且报错细节只出现在 systemd 日志中,容易误判为数据文件损坏。