Debian 上监控 MySQL 资源占用的实用方案
一 快速排查与实时监控
二 日志与慢查询定位
三 常用监控工具与可视化
四 关键指标与阈值参考
| 指标 | 如何查看 | 关注点与建议 |
|---|---|---|
| 连接数 | SHOW STATUS LIKE ‘Threads_connected’; / mysqladmin status | 接近 max_connections 时可能出现新连接被拒,结合业务峰值与超时设置评估是否需要调优或扩容。 |
| 查询吞吐 | SHOW STATUS LIKE ‘Queries’; mysqladmin status | 观察 Queries/s 的趋势变化,突增常伴随慢查询或业务高峰。 |
| 慢查询 | SHOW VARIABLES LIKE ‘slow_query_log%’; SHOW VARIABLES LIKE ‘long_query_time’; | 建议开启慢查询日志并将 long_query_time 设为 1–2 秒,定期分析并优化。 |
| InnoDB 缓冲池命中率 | SHOW STATUS LIKE ‘Innodb_buffer_pool_read%’; | 计算:命中率 ≈ 1 − Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests;低于 95% 时考虑增大 innodb_buffer_pool_size。 |
| 磁盘 I/O | iostat -x 1 | 关注 await、r/s、w/s、util%;util% 持续接近 100% 表示磁盘饱和,需优化 SQL/索引或升级存储。 |
五 一键巡检脚本示例
#!/usr/bin/env bash
# 简易 MySQL 资源巡检脚本(Debian)
MYSQL_USER="root"
MYSQL_PWD="你的密码"
MYSQL_HOST="127.0.0.1"
LOG_DIR="/var/log/mysql-monitor"
mkdir -p "$LOG_DIR"
TS=$(date +"%F_%H-%M-%S")
LOG="$LOG_DIR/check_$TS.log"
{
echo "===== $(date) ====="
echo "## systemd 状态"
systemctl status mysql --no-pager | head -n 20
echo -e "\n## mysqladmin status"
mysqladmin -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PWD" status
echo -e "\n## 连接与进程"
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PWD" -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PWD" -e "SHOW PROCESSLIST\G"
echo -e "\n## 慢查询配置"
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PWD" -e "SHOW VARIABLES LIKE 'slow_query_log%';"
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PWD" -e "SHOW VARIABLES LIKE 'long_query_time';"
echo -e "\n## InnoDB 缓冲池命中率"
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PWD" -sN -e "
SELECT
ROUND(1 - (Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests),4) AS hit_ratio
FROM performance_schema.global_status
WHERE variable_name IN ('Innodb_buffer_pool_reads','Innodb_buffer_pool_read_requests');"
echo -e "\n## 磁盘 I/O (iostat -x 1 5)"
iostat -x 1 5
echo -e "\n## 监听端口"
ss -tulpen | grep 3306
} >> "$LOG" 2>&1
echo "Saved to $LOG"
提示:将脚本加入 cron(如每 5 分钟 执行)并结合 logrotate 做日志轮转,便于长期留存与告警联动。