Debian 上定位与优化 MySQL 性能的关键在于高效读取与解读错误日志、慢查询日志与二进制日志,并结合系统日志与自动化工具形成闭环。下面给出一套可落地的日志分析技巧与命令清单。
一 日志类型与定位
- 错误日志:记录 MySQL 启动/关闭与运行期错误,Debian 常见路径为 /var/log/mysql/error.log;同时可用 journalctl -u mysql 查看 systemd 日志。
- 慢查询日志:定位执行时间过长的 SQL,便于优化;常见路径 /var/log/mysql/slow-query.log。
- 通用查询日志:记录所有客户端 SQL,用于审计与问题复现;常见路径 /var/log/mysql/query.log。
- 二进制日志:记录数据变更,用于主从复制与时间点恢复;常见路径 /var/log/mysql/binlog。
- 中继日志:主从复制从库使用。
- 配置文件位置:/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf。
以上路径与用途可据此快速定位并核对日志是否开启与落盘。
二 快速排查与实时监控命令
- 服务与系统日志
- 查看运行状态:sudo systemctl status mysql
- 实时跟踪错误日志:tail -f /var/log/mysql/error.log
- 查看 systemd 日志:journalctl -u mysql -f
- 通用与慢查询日志
- 实时查看通用日志:tail -f /var/log/mysql/query.log
- 实时查看慢查询日志:tail -f /var/log/mysql/slow-query.log
- 慢查询数量监控
- 查看累计慢查询:SHOW GLOBAL STATUS LIKE ‘Slow_queries’;
- 连接与进程
- 查看连接与线程:mysqladmin processlist
以上命令覆盖日常 90% 的“有没有问题、问题在哪”的快速定位场景。
三 慢查询分析与优化
- 启用慢查询(临时生效,动态可调)
- 开启与阈值:SET GLOBAL slow_query_log = ‘ON’;
- 指定文件:SET GLOBAL slow_query_log_file = ‘/var/log/mysql/slow-query.log’;
- 设置阈值:SET GLOBAL long_query_time = 2;(单位:秒)
- 内置工具 mysqldumpslow(快速聚合)
- 最慢 TOP10:mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log
- 高级工具 pt-query-digest(Percona Toolkit)
- 安装:sudo apt-get install percona-toolkit
- 生成报告:pt-query-digest /var/log/mysql/slow-query.log
- 时间范围:pt-query-digest --since “2025-12-25 00:00:00” --until “2025-12-26 00:00:00” /var/log/mysql/slow-query.log
- 按库过滤:pt-query-digest --filter ‘$event->{db} =~ /mydb/’ slow-query.log
- 实时采样进程列表:pt-query-digest --processlist h=localhost --interval 60 --print
- 优化要点
- 用 EXPLAIN 检查执行计划,关注 rows_examined/rows_sent 是否过大;
- 为高频过滤/排序/关联列建立合适索引,避免 **SELECT ***;
- 减少大表 JOIN、子查询与函数计算,必要时做分页/缓存;
- 定期分析并对比报告,验证优化成效。
上述工具与方法能快速找出“最耗时/最频繁”的 SQL 并指导下一步优化。
四 日志轮转与空间治理
- 使用 logrotate 自动轮转
- 二进制日志清理(避免磁盘被占满)
- 按文件名清理:PURGE BINARY LOGS TO ‘mysql-bin.000009’;
- 按时间清理:PURGE BINARY LOGS BEFORE ‘2025-07-15 00:00:00’;
- 权限与落盘
- 确保日志目录与文件属主为 mysql:mysql,如:chown -R mysql:mysql /var/log/mysql
以上策略可显著降低日志膨胀风险并保障长期稳定运行。
五 配置与常见故障要点
- 配置文件与参数
- 关键项:log_error、slow_query_log、slow_query_log_file、long_query_time、general_log、log_bin;
- 动态设置仅对当前实例有效,永久生效需写入配置文件并重启。
- 启动失败排查
- 配置语法校验:mysqld --validate-config
- 权限问题:修正 /var/log/mysql 与 /var/lib/mysql 属主为 mysql:mysql;
- 端口冲突:检查 3306 占用并释放或调整端口;
- 手动启动定位:sudo -u mysql mysqld --defaults-file=/etc/my.cnf --datadir=/var/lib/mysql。
- 性能相关参数(结合负载调优)
- InnoDB 缓冲池:innodb_buffer_pool_size
- 提交与刷盘策略:innodb_flush_log_at_trx_commit、sync_binlog
这些要点能快速定位配置错误、权限问题与端口冲突等常见故障。