首页主机资讯Debian MySQL资源占用如何监控

Debian MySQL资源占用如何监控

时间2025-11-21 11:20:03发布访客分类主机资讯浏览1461
导读:Debian 上监控 MySQL 资源占用的实用方案 一 快速排查与实时监控 进程与系统资源:使用 top/htop 观察 mysqld 的 CPU%、MEM%;用 ps -ef | grep mysqld 查看完整命令行与启动参数;用...

Debian 上监控 MySQL 资源占用的实用方案

一 快速排查与实时监控

  • 进程与系统资源:使用 top/htop 观察 mysqldCPU%、MEM%;用 ps -ef | grep mysqld 查看完整命令行与启动参数;用 vmstat 1 关注 us、sy、free 等整体负载与内存压力。
  • 服务状态与基础指标:用 systemctl status mysql 查看是否运行与最近日志;用 mysqladmin -u root -p status 获取 Uptime、Threads、Queries 等;在 MySQL 客户端执行 SHOW STATUS LIKE ‘Threads_connected’; SHOW PROCESSLIST; 查看连接与正在执行的语句。
  • 磁盘 I/O:安装 sysstat 后执行 iostat -x 1,关注 await、r/s、w/s、util% 以判断是否存在 I/O 瓶颈。
  • 网络与连接:用 ss -tulpen | grep 3306netstat -tulpen | grep 3306 检查监听与连接状态。

二 日志与慢查询定位

  • 错误日志:默认路径 /var/log/mysql/error.log,用于发现启动失败、崩溃、InnoDB 恢复与告警信息。
  • 慢查询日志:在 /etc/mysql/my.cnf[mysqld] 段落开启并配置阈值,例如:
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow-queries.log
    long_query_time = 2
    修改后执行 systemctl restart mysql 生效;随后可用 mysqldumpslow 或 pt-query-digest 分析耗时 SQL。

三 常用监控工具与可视化

  • 命令行增强:安装 innotop(sudo apt install innotop),可实时查看 InnoDB 缓冲池、I/O、复制、查询列表 等,适合临时排障与深入观察。
  • 企业级与开源监控:
    • Zabbix:通过模板监控 MySQL 可用性、连接数、查询速率、复制延迟等,提供告警与图形界面。
    • Prometheus + mysqld_exporter + Grafana:以时间序列采集指标,Grafana 做可视化与阈值告警,适合长期趋势与容量规划。

四 关键指标与阈值参考

指标 如何查看 关注点与建议
连接数 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 做日志轮转,便于长期留存与告警联动。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian MySQL资源占用如何监控
本文地址: https://pptw.com/jishu/753110.html
Debian上MySQL配置有哪些要点 ubuntu gitlab自动化运维策略

游客 回复需填写必要信息