在 mysql 数据库运维中,遇到服务启动失败、连接异常、死锁等问题时,错误日志(error log)绝对是你的 “排障利器”。它默认开启,记录着 mysql 启动、关闭及运行过程中的错误、警告与调试信息,是定位问题根源的核心依据。本文将从配置查看、核心作用、进阶功能三个维度,带你全面掌握 error log 的使用技巧。
一、error log 基础配置与查看
1. 查看与配置日志路径
error log 的默认存储路径可通过 sql 命令直接查询:
-- 查看错误日志存储路径 show global variables like "log_error";

默认路径通常为data/mysql/hostname.err(例如/data/mysql/localhost.err)。若需自定义存储路径,可通过修改配置文件实现永久生效:
# 编辑mysql配置文件 vim /data/mysql/conf/my.cnf # 添加配置项:指定日志存储路径 log-error = /data/mysql/log/mysql.err # 重启mysql服务使配置生效 /etc/init.d/mysql.server restart
2. 配置日志记录级别
通过log_error_verbosity参数可控制日志记录的详细程度,满足不同排障需求:
-- 查看当前日志级别 show global variables like "log_error_verbosity";
参数取值及对应含义:

- 1:仅记录错误信息(error),日志最简洁;
- 2:记录错误 + 警告信息(error + warning),默认级别;
- 3:记录所有信息(error + warning + note + 调试信息),适合深度排障。
3. 查看 error log 的实用命令
日常运维中,常用以下命令快速查看日志内容:
# 查看最后50行日志(定位最新错误) tail -n 50 /data/mysql/log/mysql.err # 实时跟踪日志(监控服务运行状态) tail -f /data/mysql/log/mysql.err

二、error log 核心排障场景实战
场景 1:定位服务启动异常
mysql 启动失败是常见故障,error log 能精准定位原因。以下为模拟故障与排查过程(仅限测试环境操作!):
- 模拟启动异常:故意修改 redo log 文件属主,导致权限不足
# 修改ib_logfile0文件属主为root(高危操作,测试环境专用) chown root.root /data/mysql/data/ib_logfile0 # 尝试启动mysql,此时会启动失败 /etc/init.d/mysql.server restart

- 查看日志定位原因:
tail -f /data/mysql/log/mysql.err
日志将显示明确错误:[error] [my-012884] [innodb] /data/mysql/data/ib_logfile0 can't be opened in read-write mode.(文件无法以读写模式打开)

- 修复问题并重启:
# 恢复文件属主为mysql用户 chown mysql.mysql /data/mysql/data/ib_logfile0 # 重新启动服务,启动成功 /etc/init.d/mysql.server start

场景 2:诊断数据库连接异常
当用户无法连接 mysql 时,error log 会记录连接失败细节(如密码错误、账户锁定):
- 准备测试环境:创建带锁定规则的测试用户
-- 创建用户:密码错误4次后锁定3天 create user 'test_pass'@'localhost' identified by '123456' failed_login_attempts 4 password_lock_time 3; -- 授予查询权限 grant select on *.* to 'test_pass'@'localhost'; -- 开启详细日志,记录连接失败信息 set global log_error_verbosity = 3;
- 模拟连接失败:使用错误密码登录
mysql -utest_pass -p'wrong_pass' # 连接失败
- 查看日志获取原因:
tail -f /data/mysql/log/mysql.err
日志将显示:[note] [my-010926] [server] access denied for user 'test_pass'@'localhost' (using password: yes)

场景 3:记录与分析死锁信息
innodb 引擎出现死锁时,error log 会完整记录死锁事务的 sql、锁类型及等待关系:
- 模拟死锁(需两个会话配合):
- 先创建测试表并插入数据:
use maria; create table errlog_t1(id int primary key, a varchar(10)) engine=innodb; insert into errlog_t1 values (1,'a'),(2,'b');
- 两个会话执行以下操作触发死锁:
| session1 | session2 |
|---|---|
| begin; | begin; |
| delete from errlog_t1 where id=1; | delete from errlog_t1 where id=2; |
| delete from errlog_t1 where id=2; | delete from errlog_t1 where id=1; |
| commit; | commit; |
- 查看死锁日志:
tail -n 100 /data/mysql/log/mysql.err
日志将详细展示两个事务的transaction信息及锁等待关系(如waiting for this lock to be granted)。

三、mysql 8.0+ 进阶功能:日志过滤
mysql 8.0 及以上版本支持通过dragnet组件过滤日志,避免无用信息刷屏(如频繁的连接失败日志)。
1. 开启日志过滤
-- 1. 加载dragnet过滤组件 install component 'file://component_log_filter_dragnet'; -- 2. 配置日志服务:先过滤再输出 set global log_error_services = 'log_filter_dragnet; log_sink_internal';
2. 配置过滤规则(示例)
需求:限制信息类日志(note)每分钟最多记录 1 条:
# 设置过滤规则:信息类日志每分钟不超过 1 条 set global dragnet.log_error_filter_rules = 'if prio>=information then throttle 1/60.';
prio>=information:匹配 note、warning、error 级别的日志;
throttle 1/60:每分钟最多记录 1 条符合条件的日志。

3. 验证过滤效果
短时间内多次触发信息类日志(如重复用错误密码登录):
mysql -utest_pass -p'wrong_pass' # 第1次:日志记录 mysql -utest_pass -p'wrong_pass' # 第2次(1分钟内):日志不记录
查看 error log,仅能看到第 1 次连接失败的记录。

4. 关闭日志过滤
-- 1. 恢复日志服务:直接输出,不经过滤 set global log_error_services = 'log_sink_internal'; -- 2. 卸载dragnet组件 uninstall component 'file://component_log_filter_dragnet'; -- 3. 恢复默认日志级别 set global log_error_verbosity = 2;

四、mysql 8.0.22+ 新特性:从表中查询日志
mysql 8.0.22 及以上版本支持将 error log 存储到performance_schema.error_log系统表中,可通过 sql 直接查询,无需操作日志文件。
1. 常用查询示例
-- 查看最新10条错误日志 select * from performance_schema.error_log order by logged desc limit 10; -- 查看所有error级别的日志(格式化输出) select * from performance_schema.error_log where prio = 'error'\g; -- 查询指定时间范围的日志 select * from performance_schema.error_log where logged between '2026-02-04 15:00:00' and '2026-02-04 15:05:00';



2. 注意事项
performance_schema.error_log仅支持查询,不允许insert/update/delete操作;- 表中日志与文件日志内容完全一致,文件适合实时跟踪,表适合复杂条件过滤;
- 无法通过
truncate清空表,需通过修改log_error_services重置日志。
总结
mysql error log 作为数据库运维的 “核心排障工具”,其价值不仅在于记录日志,更在于帮助我们快速定位启动异常、连接失败、死锁等问题。通过本文的配置指南、实战场景与进阶功能,相信你已能熟练运用 error log 解决日常运维中的大部分问题。
对于 mysql 8.0 + 用户,建议尝试日志过滤与表查询功能,提升排障效率;而基础配置与核心排障场景则适用于所有版本,是必备的运维技能。如果遇到复杂问题,不妨先查看 error log—— 答案往往就在其中!
以上就是mysql错误日志error log从配置到故障排查的完全指南的详细内容,更多关于mysql错误日志error log排查的资料请关注代码网其它相关文章!
发表评论