一、错误日志配置与管理

 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;

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)