首页/数据/数据库速查/MySQL 错误日志(error log)

MySQL 错误日志(error log)

记录启动关闭、崩溃、复制中断与死锁等关键事件;位置由 log_error 决定,是排障主要现场。

数据库速查数据更新于 2026-10-13

错误日志记录什么

错误日志是 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 日志中,容易误判为数据文件损坏。

易错点

  • 把慢查询问题寄希望于错误日志:它不记录语句耗时,慢查询要看慢日志
  • 只看最后的报错而不看上下文:启动失败的原因常在前面几行,例如目录权限或参数解析
  • 磁盘写满时只清日志不查增长原因:日志无限增长与数据增长混在一起,问题会反复出现
  • 升级后忽略弃用警告:等到下一个大版本才集中爆发不兼容问题

数据来源与参考

  • MySQL 8.0 Reference Manual: The Error Log

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌