首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 監控每個 IP 連接數的 3 種實用方法

     編輯:MySQL 綜合教學

MySQL 監控每個 IP 連接數的 3 種實用方法

生產環境常需統計「哪個應用服務器連接數最多」,而非總連接數。本文提供 3 種從信息庫、命令行、腳本維度獲取 IP 級連接統計的方案。

方法一:information_schema.processlist 聚合(推薦,純 SQL)


SELECT 
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    COUNT(*) AS connection_count
FROM information_schema.processlist
GROUP BY client_ip
ORDER BY connection_count DESC;

輸出示例:


+-------------+------------------+
| client_ip   | connection_count |
+-------------+------------------+
| 10.0.1.5    | 42               |
| 10.0.1.8    | 38               |
| 10.0.2.12   | 15               |
| 127.0.0.1   | 3                |
+-------------+------------------+

優點:無需額外工具、可直接嵌入監控系統(Prometheus mysqld_exporter 自定義查詢)。
注意:host 格式為 ip:port,SUBSTRING_INDEX(host, ':', 1) 取 IP;若啟用 skip-name-resolve 顯示 IP,否則顯示主機名需額外解析。

方法二:mysql 命令行 + 管道處理(適合運維手工排查)


mysql -u root -h127.0.0.1 -p -e "SHOW PROCESSLIST\G" \
| grep "Host:" \
| awk -F': ' '{print $2}' \
| awk -F':' '{print $1}' \
| sort | uniq -c | sort -nr

解析:

  1. SHOW PROCESSLIST\G 垂直顯示,每行一字段。
  2. grep "Host:" 過濾 Host 行。
  3. awk -F': ' '{print $2}' 取冒號後值(含端口)。
  4. awk -F':' '{print $1}' 截取 IP。
  5. sort | uniq -c | sort -nr 統計並降序。

方法三:精簡版命令行(跳過 \G 縱向顯示)


mysql -u root -h127.0.0.1 --skip-column-names -p -e "SHOW PROCESSLIST;" \
| awk '{print $3}' \
| awk -F':' '{print $1}' \
| sort | uniq -c | sort -nr

--skip-column-names 去除表頭,$3 直接取 Host 列(表格模式第 3 列)。

對比總結

維度方法一方法二方法三
數據源information_schemaSHOW PROCESSLIST\GSHOW PROCESSLIST
適合場景監控系統采集、報表查詢運維手工排查、臨時統計快速單次統計
權限需求PROCESS 或 SELECT ON information_schemaPROCESSPROCESS
解析準確度高(標準表)高高
自動化友好★★★★★★★☆☆☆★★★☆☆

進階:持續監控腳本(每 10 秒采樣)


#!/bin/bash
# monitor_connections.sh
while true; do
    echo "=== $(date '+%F %T') ==="
    mysql -u root -h127.0.0.1 -p'password' -N -e \
    "SELECT SUBSTRING_INDEX(host,':',1) ip, COUNT(*) cnt FROM information_schema.processlist GROUP BY ip ORDER BY cnt DESC;"
    sleep 10
done

配合 watch -n 10 或納入 Zabbix/Prometheus/Grafana 實現可視化告警。

常見問題

  • 顯示主機名而非 IP:配置 skip-name-resolve=1(my.cnf [mysqld]),避免 DNS 解析延遲且直接見 IP。
  • Host 列為 localhost
  • :本機 Unix socket 連接,IP 顯示為 localhost,統計時可歸類為 127.0.0.1。
  • 連接數驟增:檢查應用連接池配置(maxPoolSize)、是否未正確關閉連接、是否遭遇慢查詢堆積導致連接佔用不釋放。

掌握這 3 種方法,從「總連接數」進化到「IP 級連接畫像」,快速定佔用大戶、預防連接耗盡事故。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved