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

MySQL 監控客戶端連線 IP 三種實用方法

     編輯:MySQL 綜合教學

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


SELECT
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    COUNT(*) AS connection_count,
    GROUP_CONCAT(DISTINCT user) AS users,
    GROUP_CONCAT(DISTINCT db) AS databases
FROM information_schema.processlist
WHERE command != 'Sleep'  -- 可選:過濾空閒連線
GROUP BY client_ip
ORDER BY connection_count DESC;

優點:無需 Shell 權限、可直接嵌入監控系統、支援聚合分析。

方法二:Shell 管道組合 (運維腳本適用)


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

輸出範例:


  45 10.0.1.10
  12 10.0.1.11
   3 10.0.1.12

方法三:SHOW PROCESSLIST + AWK (輕量)


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

進階:持久化監控腳本


#!/bin/bash
# monitor_connections.sh - 每分鐘執行,寫入時序資料庫
MYSQL_CMD="mysql -u monitor -p'xxxx' -h127.0.0.1 --skip-column-names"
TS=$(date +%s)
$MYSQL_CMD -e "SHOW PROCESSLIST" | awk '{print $3}' | awk -F':' '{print $1}' | sort | uniq -c | while read cnt ip; do
    echo "mysql_connections{ip=\"$ip\"} $cnt $TS" | curl --data-binary @- https://pushgateway:9091/metrics/job/mysql
done

告警策略建議

指標閾值動作
單 IP 連線數> 200告警 + 限流/封禁
總連線數> max_connections * 0.8擴容/優化慢查詢
Sleep 連線佔比> 50%檢查連線池配置、啟用 wait_timeout

總結

「SQL 聚合分析、Shell 快速排查、腳本持久化監控」三層組合,全方位掌握 MySQL 客戶端連線 IP 分布。生產環境建議接入 Prometheus + Grafana,建立連線數儀表板與自動告警。

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