一、错误日志配置与管理
1. 查看错误日志配置
查看错误日志文件路径
SHOW VARIABLES LIKE 'log_error';
查看是否记录警告信息到错误日志
SHOW VARIABLES LIKE 'log_warnings';
查看错误日志详细配置(MySQL 8.0+)
SHOW VARIABLES LIKE 'log_error_services'; SHOW VARIABLES LIKE 'log_error_verbosity';
输出示例:
Variable_name Value
log_error /var/log/mysql/error.log
Variable_name Value
log_warnings 2
2. 配置错误日志
在 MySQL 配置文件 `my.cnf` (Linux) 或 `my.ini` (Windows) 中:
[mysqld]
指定错误日志路径和文件名
log_error = /var/log/mysql/mysql-error.log
设置日志详细级别(1=错误,2=错误+警告,3=错误+警告+信息)
log_error_verbosity = 2
在MySQL 8.0+中配置日志组件
log_error_services = 'log_filter_internal; log_sink_internal'
设置时间戳格式(MySQL 8.0+)
log_timestamps = SYSTEM
3. 错误日志级别说明
级别 记录内容 适用场景
1 只记录错误信息 生产环境,减少日志量
2 错误 + 警告(推荐) 平衡可读性和信息量
3 错误 + 警告 + 信息 开发调试环境
二、查看与分析错误日志
1. 实时查看错误日志
实时监控错误日志(推荐)
tail -f /var/log/mysql/error.log
查看最后100行错误日志
tail -n 100 /var/log/mysql/error.log
查找特定错误信息
grep -i "error" /var/log/mysql/error.log
grep -i "warning" /var/log/mysql/error.log
查看特定时间段的日志
sed -n '/2023-10-27T10:00:00/,/2023-10-27T12:00:00/p' /var/log/mysql/error.log
2. 常见错误日志内容分析
服务器启动信息
2023-10-27T10:00:00.000000Z 0 [Note] /usr/sbin/mysqld: ready for connections.
InnoDB存储引擎信息
2023-10-27T10:00:01.000000Z 0 [Note] InnoDB: Buffer pool(s) load completed at
客户端连接信息
2023-10-27T10:05:00.000000Z 10 [Note] Access denied for user 'root'@'localhost'
复制相关错误
2023-10-27T10:10:00.000000Z 0 [Warning] Slave SQL for channel '': ... Error_code: 1032
崩溃恢复信息
2023-10-27T10:15:00.000000Z 0 [ERROR] InnoDB: Attempted to open a previously opened tablespace
3. 使用专用工具分析
使用mysql自带的日志分析
mysqldumpslow /var/log/mysql/error.log
使用第三方工具分析错误模式
logwatch --service mysql --range today
三、错误日志维护
1. 日志轮询与清理
使用mysqladmin刷新日志(创建新日志文件)
mysqladmin -u root -p flush-logs
手动轮询错误日志
mv /var/log/mysql/error.log /var/log/mysql/error.log.old
mysqladmin -u root -p flush-logs
压缩旧日志文件
gzip /var/log/mysql/error.log.old
2. 自动日志清理
创建定时任务(crontab)自动维护:
每天凌晨清理30天前的错误日志
0 2 * * * find /var/log/mysql/ -name "error.log.*" -mtime +30 -delete
每周压缩旧日志
0 3 * * 0 find /var/log/mysql/ -name "error.log.old" -exec gzip {} \;
3. 使用logrotate管理(Linux)
创建 `/etc/logrotate.d/mysql-error` 配置文件:
/var/log/mysql/error.log {
daily
rotate 30
missingok
compress
delaycompress
notifempty
create 640 mysql mysql
postrotate
如果mysql进程正在运行,则重新打开日志文件
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
/usr/bin/mysqladmin flush-logs
fi
endscript
}
四、常见错误分析与处理
1. 启动失败错误
[ERROR] Can't start server: Bind on TCP/IP port: Address already in use
解决方案: 检查端口是否被占用,或修改MySQL端口。
2. 权限问题
[ERROR] Access denied for user 'user'@'localhost' (using password: YES)
解决方案: 重置用户密码或检查权限设置。
3. 存储引擎错误
[ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
解决方案: 检查是否有其他MySQL实例运行,清理残留进程。
4. 磁盘空间不足
[ERROR] /usr/sbin/mysqld: Disk is full writing './mysql-bin.000001'
解决方案: 清理磁盘空间或迁移数据文件。
五、最佳实践与监控
1. 错误日志监控配置
[mysqld]
# 设置合适的日志级别
log_error_verbosity = 2
启用详细的连接错误日志
log_raw = ON
设置最大日志文件大小(避免磁盘占满)
max_error_log_size = 100M
2. 监控脚本示例
!/bin/bash
监控MySQL错误日志中的关键错误
ERROR_LOG="/var/log/mysql/error.log"
ALERT_EMAIL="admin@example.com"
检查最近5分钟内的错误
recent_errors=$(grep -i "error" $ERROR_LOG | grep "$(date -d '5 minutes ago' '+%Y-%m-%d %H:%M')")
if [ -n "$recent_errors" ]; then
echo "Critical errors found in MySQL error log:" | mail -s "MySQL Error Alert" $ALERT_EMAIL
echo "$recent_errors" | mail -s "MySQL Error Details" $ALERT_EMAIL
fi
3. 集成监控系统
使用Prometheus监控错误日志
安装mysql_exporter并配置错误日志监控
使用ELK栈集中管理日志
配置Filebeat收集MySQL错误日志到Elasticsearch
六、高级配置(MySQL 8.0+)
1. 组件式错误日志
查看可用的错误日志组件
SELECT * FROM mysql.component;
安装JSON格式的错误日志组件
INSTALL COMPONENT 'file://component_log_sink_json';
配置多输出源
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';
2. JSON格式错误日志
[mysqld]
log_error_services = 'log_filter_internal; log_sink_json'
log_error = /var/log/mysql/mysql-error.json
3. 性能模式集成
使用性能模式监控错误事件
SELECT * FROM performance_schema.error_log;
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程