錯誤日誌中頻繁出現 Aborted connection 訊息,對應狀態變量 Aborted_connects 與 Aborted_clients。二者雖同屬「連接異常中斷」,但發生階段、根因、處理策略截然不同。本文基於官方文檔深度解析並給出排查清單。
| 指標 | 階段 | 含義 | 典型原因 |
|---|---|---|---|
| Aborted_connects | 連接建立階段 (握手前/中) | 客戶端嘗試連接但失敗,未進入認證完成狀態 | 無權限、密碼錯誤、連接包損壞、connect_timeout 逾時 |
| Aborted_clients | 連接建立後、正常斷開前 | 已認證連接異常中斷,未正常調用 mysql_close() | 客戶端崩潰、超時 (wait_timeout/interactive_timeout)、網絡中斷、max_allowed_packet 過小 |
-- 查看計數器 SHOW GLOBAL STATUS LIKE 'Aborted_%'; -- 近期錯誤日誌 (需開啟 log_error) SHOW VARIABLES LIKE 'log_error'; -- 然後查看該文件 tail -f /var/log/mysql/error.log
mysql.user 表。SELECT User, Host, authentication_string FROM mysql.user;SET GLOBAL connect_timeout = 30; (或 my.cnf 永久生效)。fail2ban、防火牆白名單、修改默認端口緩解。conn.close()、連接池洩露、進程異常退出 (OOM Killer、Segment Fault)。maxIdle, minEvictableIdleTimeMillis)。wait_timeout (非交互式默認 28800s=8h)interactive_timeout (交互式默認 28800s)validationQuery / testOnBorrow / idleConnectionTestPeriod 定期心跳,或調大超時。max_allowed_packet 過小導致大包被丟棄。SET GLOBAL max_allowed_packet = 67108864; -- 64MBethtool eth0 檢查,統一強制全雙工。Aborted_connects、Aborted_clients 納入監控系統 (Prometheus/Grafana/Zabbix)。FLUSH STATUS 重置計數器 (僅統計用,不影響運行)。Aborted_connects 看「能不能連上」——查權限、密碼、網絡握手、超時;
Aborted_clients 看「連上後為什麼斷」——查應用關閉邏輯、空閒超時、網絡傳輸、封包大小。
精準區分二者,能將連接異常排查時間從「大海撈針」縮短至「定向打擊」。