在 Debian 系统中如何查看与分析 MySQL 日志

一、MySQL 日志类型及默认存放路径
- 错误日志 Error Log:用于记录 MySQL 服务的启动、停止、运行异常以及告警信息。在 Debian 系统中,常见方式是通过 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 将错误日志写入 syslog,可使用命令查看:sudo journalctl -u mysql.service 或 tail -f /var/log/syslog;如果已改为文件输出,常见日志路径为 /var/log/mysql/error.log。也可以在 MySQL 中查询变量:SHOW VARIABLES LIKE ‘log_error’;。
- 通用查询日志 General Query Log:记录客户端连接以及所有执行过的 SQL 语句,默认状态为关闭,启用后常见路径有 /var/log/mysql/query.log 或 /var/log/mysql/mysql.log。
- 慢查询日志 Slow Query Log:用于记录执行时间超过 long_query_time 的 SQL 语句,默认通常关闭,启用后常见路径包括 /var/log/mysql/slow.log 或 /var/log/mysql/mysql-slow.log。
- 二进制日志 Binary Log:主要用于主从复制、数据恢复和按时间点恢复,常见路径为 /var/log/mysql/mysql-bin.log。
- 配置文件常见位置:/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf。
二、快速查看 MySQL 日志与实时跟踪方法
- 错误日志
- 查看 systemd 日志:sudo journalctl -u mysql.service -f
- 查看 syslog:sudo tail -f /var/log/syslog | grep mysqld
- 如果已经切换为文件输出:sudo tail -f /var/log/mysql/error.log
- 通用查询日志(需先启用)
- 实时查看:sudo tail -f /var/log/mysql/query.log
- 慢查询日志(需先启用)
- 实时查看:sudo tail -f /var/log/mysql/slow.log
- 二进制日志(适合审计与回放,非纯文本)
- 列出日志:mysql -e “SHOW BINARY LOGS;”
- 查看内容:mysqlbinlog /var/log/mysql/mysql-bin.000001 | less
三、启用与配置 MySQL 日志
- 配置文件路径:/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf,通常在 [mysqld] 段中进行设置。
- 错误日志(文件输出示例)
- 注释或删除 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 中的 syslog 行
- 增加:
- log_error = /var/log/mysql/error.log
- 通用查询日志
- 配置:
- general_log = 1
- general_log_file = /var/log/mysql/query.log
- 配置:
- 慢查询日志
- 配置:
- slow_query_log = 1
- slow_query_log_file = /var/log/mysql/slow.log
- long_query_time = 2(单位:秒)
- 配置:
- 二进制日志(如用于复制或数据恢复)
- 配置:
- log_bin = /var/log/mysql/mysql-bin
- server-id = 1
- expire_logs_days = 10
- max_binlog_size = 100M
- 配置:
- 运行时开关(无需重启,可动态生效)
- 开启通用查询日志:SET GLOBAL general_log = ‘ON’;
- 开启慢查询日志:SET GLOBAL slow_query_log = ‘ON’;
- 调整慢查询阈值:SET GLOBAL long_query_time = 2;(需新会话生效)
- 使配置生效
- 动态参数会立即生效;如果涉及文件输出切换或新增配置模块,通常建议重启服务:sudo systemctl restart mysql。
四、MySQL 日志分析与故障定位方法
- 通过错误日志定位故障
- 重点关注关键词:ERROR、Warning、InnoDB: Operating system error、Aborted connection,结合具体时间点以及线程、连接信息,判断 MySQL 启动失败、异常崩溃、权限不足、磁盘空间不足或内存问题等原因。
- 慢查询日志分析
- 内置工具:
- mysqldumpslow:可按出现次数、总耗时、平均耗时、扫描行数等维度进行汇总分析,示例:mysqldumpslow /var/log/mysql/slow.log
- 第三方工具:
- pt-query-digest(Percona Toolkit):能够更深入地分析慢查询日志,并提供 SQL 优化建议,示例:pt-query-digest /var/log/mysql/slow.log
- 优化思路:针对高频且耗时较长的 SQL,增加合适索引、避免 **SELECT ***、减少全表扫描、优化分页和子查询,在必要时使用覆盖索引提升查询效率。
- 内置工具:
- 通用查询日志审计
- 适合在临时排查 MySQL 问题时启用,但长期打开会对数据库性能产生影响,因此建议仅在故障排查窗口内短时间开启。
- 二进制日志用于恢复与回放
- 可结合 mysqlbinlog 按时间或位置筛选并执行,常用于误删数据恢复、主从复制搭建和操作回放分析。
- 系统层面辅助排查
- 资源与连接状态可通过 top/htop、ps aux | grep mysql、ping 进行检查;必要时可执行 sudo systemctl restart mysql 重启服务。
五、日志轮转与日常维护建议
- 建议使用 logrotate 定期轮转 MySQL 日志,避免单个日志文件过大占满磁盘空间;Debian 的 MySQL 安装包通常已自带 logrotate 配置,可根据实际需求调整保留周期和压缩策略。
- 二进制日志建议设置自动过期清理:expire_logs_days = 10;在执行清理前,应确认当前没有复制或数据恢复需求。
- 在进行重要变更前,建议先备份配置文件与关键日志,变更完成后再通过日志检查配置是否生效以及系统是否存在异常。
