在 Debian 上监控 MySQL,可以从系统层、MySQL 内部状态、日志、以及第三方工具几个层面来做。下面按“从简单到专业”的方式给你一个比较完整的方案。
systemctl status mysql
# 或
service mysql status
查看进程:
ps aux | grep mysqld
mysqladmin status
示例输出含义:
mysqladmin extended-status
或进入 MySQL:
SHOW STATUS;
SHOW GLOBAL STATUS;
重点关注:
Threads_connectedThreads_runningSlow_queriesInnodb_buffer_pool_wait_freeSHOW PROCESSLIST;
-- 或
SHOW FULL PROCESSLIST;
看是否有:
SleepDebian 一般是:
/etc/mysql/mysql.conf.d/mysqld.cnf
添加或修改:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
重启 MySQL:
systemctl restart mysql
tail -f /var/log/mysql/mysql-slow.log
或用工具分析:
mysqldumpslow /var/log/mysql/mysql-slow.log
tail -f /var/log/mysql/error.log
重点关注:
top
htop
free -h
df -h
iotop
MySQL 常见瓶颈:
MySQL → mysqld_exporter → Prometheus → Grafana
apt install prometheus-mysqld-exporter
配置:
/etc/default/prometheus-mysqld-exporter
创建监控用户:
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
Grafana 导入 MySQL Dashboard(如 7362)。
zabbix-agent| 指标 | 说明 |
|---|---|
| Threads_connected | 连接数 |
| Slow_queries | 慢查询 |
| Innodb_row_lock_waits | 锁等待 |
| Buffer pool hit rate | 缓存命中率 |
| Replication lag | 主从延迟 |
#!/bin/bash
C=$(mysqladmin status | awk '{print $4}')
if [ "$C" -gt 200 ]; then
echo "MySQL 连接过多" | mail admin@x.com
fi
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置方案。