错误日志是MySQL记录服务器运行期间发生的错误、警告和关键事件的日志文件,是诊断MySQL问题的首要工具。
写入时机:实时写入(同步写入磁盘) 内容格式:
时间戳 [日志级别] [错误代码] [子系统] 错误信息
日志轮转: 需要外部工具(如logrotate)管理 多版本差异: - MySQL 5.7:简单文本格式 - MySQL 8.0+:支持组件化和JSON格式
服务器启停信息 严重错误信息(崩溃、表损坏等) 警告信息(非致命问题) 事件调度器信息 从库复制错误 InnoDB引擎状态信息
[mysqld]
log_error = /var/log/mysql/mysql-error.log
log_error_verbosity = 3
log_error_services = log_filter_internal; log_sink_internal
log_warnings = 2
SHOW VARIABLES LIKE 'log_error';
MySQL 提供了两种主要的错误日志记录方式:将错误日志存储在系统表中或存储在文件系统中。以下是它们的比较和各自存在的问题。
实现方式: 将错误日志存储在 mysql.error_log 系统表中
优点:
缺点/问题:
实现方式: 将错误日志写入指定的文件(如 hostname.err)
优点:
缺点/问题:
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
log_error | String | 主机名.err | 错误日志文件路径 |
log_error_verbosity | Integer | 2 | 日志详细程度: 1=ERROR 2=ERROR+WARNING 3=ERROR+WARNING+INFORMATION |
log_error_services | String | 见说明 | MySQL 8.0+日志服务组件 |
log_warnings | Integer | 2 | 警告日志级别(已弃用,建议使用log_error_verbosity替代) |
"log_filter_internal; log_sink_internal"
log_warnings
参数在MySQL 8.0中已被标记为弃用log_error_verbosity
替代-- 设置错误日志路径
SET GLOBAL log_error = '/var/log/mysql/mysql-error.log';
-- 设置详细日志级别(记录错误、警告和信息)
SET GLOBAL log_error_verbosity = 3;
-- 查看当前设置
SHOW VARIABLES LIKE 'log_error%';
2025-04-20T14:23:45.123456Z 0 [ERROR] [MY-010123] [Server] Access denied for user 'root'@'localhost'
2025-04-20T14:23:46.234567Z 0 [Warning] [MY-010000] [Server] InnoDB: Cannot open table test/corrupted_table
2025-04-20T14:23:47.345678Z 0 [Note] [MY-010000] [Server] Server shutdown initiated
/var/log/mysql/mysql-error.log {
daily
rotate 30
missingok
compress
delaycompress
notifempty
create 640 mysql mysql
postrotate
mysqladmin flush-logs
endscript
}
# 查看最近错误
tail -n 100 /var/log/mysql/mysql-error.log
# 检查启动错误
grep -A 5 "ERROR" /var/log/mysql/mysql-error.log | head -20
# 检查复制错误
grep "replication" /var/log/mysql/mysql-error.log
# 检查表损坏错误
grep "corrupt" /var/log/mysql/mysql-error.log
# 查找特定错误
grep -i "error" /var/log/mysql/mysql-error.log
# 统计错误类型
awk '/\[ERROR\]/{print $5}' /var/log/mysql/mysql-error.log | sort | uniq -c
错误代码 | 说明 | 解决方案 |
---|---|---|
MY-010123 | 访问被拒绝 | 检查用户权限 |
MY-012345 | 表损坏 | 使用 REPAIR TABLE 修复 |
MY-002233 | 连接数耗尽 | 增加 max_connections 参数 |
MY-003344 | 磁盘空间不足 | 清理磁盘空间或扩容存储 |
组件化架构:
-- 安装syslog组件
INSTALL COMPONENT "file://component_log_sink_syseventlog";
-- 启用多目标输出
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_syseventlog';
多日志输出:
log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json'
JSON格式日志:
{
"timestamp": "2023-08-20T14:23:45.123456Z",
"priority": "ERROR",
"err_code": "MY-010123",
"subsystem": "Server",
"message": "Access denied for user 'root'@'localhost'"
}
增强过滤:
-- 只记录特定子系统的错误
SET GLOBAL log_error_services = 'log_filter_internal;
log_sink_filter;
log_sink_internal';
ALTER COMPONENT "file://component_log_filter_dragnet"
SET VARIABLES = 'filter_rules = "subsystem=InnoDB"';
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有