ERROR 1040 (HY000): Too many connections
Can not connect to MySQL server
當前連線數達到 max_connections 上限,新連線被拒。
| 參數 | 預設值 | 建議值 | 說明 |
|---|---|---|---|
max_connections | 151 (5.7) / 100 (舊版) | 500-3000 | 最大同時連線數,含 1 個 SUPER 保留連線 |
wait_timeout | 28800 (8小時) | 10-60 秒 | 非互動連線空閒超時秒數 |
interactive_timeout | 28800 | 300-600 | 互動式客戶端 (mysql CLI) 空閒超時 |
max_user_connections | 0 (無限制) | 按用戶限制 | 單用戶最大連線數,防單一應用佔滿 |
# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
max_connections = 1000
wait_timeout = 30
interactive_timeout = 300
max_user_connections = 200 # 視應用數量設定
[mysqld]
max_connections = 1000
wait_timeout = 30
SET GLOBAL max_connections = 1000;
SET GLOBAL wait_timeout = 30;
永久生效必須寫入配置檔並重啟。
maximumPoolSizeThreads_connected 趨勢,配合 SHOW PROCESSLIST 找洩漏點-- 1. 管理員保留連線登入 (SUPER 權限)
mysql -u root -p -h localhost
-- 2. 臨時調大上限
SET GLOBAL max_connections = 2000;
-- 3. 殺掉閒置連線
SELECT CONCAT('KILL ', id, ';') FROM information_schema.PROCESSLIST
WHERE COMMAND = 'Sleep' AND TIME > 60;
-- 執行輸出的 KILL 語句
-- 當前連線使用率
SELECT
VARIABLE_VALUE AS max_conn,
(SELECT COUNT(*) FROM information_schema.PROCESSLIST) AS current_conn,
ROUND((SELECT COUNT(*) FROM information_schema.PROCESSLIST) / VARIABLE_VALUE * 100, 2) AS usage_pct
FROM performance_schema.global_variables
WHERE VARIABLE_NAME = 'max_connections';
告警閾值建議:使用率 > 70% 預警,> 85% 緊急擴容或排查洩漏。