Too many connections 表示當前連接數達到 max_connections 上限。核心影響因子:max_connections 設定值、wait_timeout 空閒釋放時間、應用連接池洩漏、慢查詢堵塞。
1040 (ER_CON_COUNT_ERROR)SQLState: 08004[mysqld]
max_connections = 1000
wait_timeout = 60
interactive_timeout = 60
[mysqld]
max_connections = 1000
wait_timeout = 60
修改後 必須重啟 MySQL 生效:systemctl restart mysqld 或 net restart mysql。
SET GLOBAL max_connections = 1000;
SET GLOBAL wait_timeout = 60;
-- 注意:重啟後失效,需同步修改配置檔
SHOW PROCESSLIST;
-- 或詳細版
SELECT * FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep' ORDER BY TIME DESC;
SELECT
SUBSTRING_INDEX(host, ':', 1) AS client_ip,
COUNT(*) AS conn_count,
GROUP_CONCAT(DISTINCT COMMAND) AS cmds,
GROUP_CONCAT(DISTINCT STATE) AS states
FROM information_schema.PROCESSLIST
GROUP BY client_ip ORDER BY conn_count DESC;
maxLifetime、idleTimeout-- 開啟慢查詢日誌
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
| 層面 | 措施 |
|---|---|
| 應用層 | 連接池適度大小、啟用連接驗證、縮短超時 |
| Proxy 層 | ProxySQL/MaxScale 連接多工、讀寫分離 |
| 資料庫層 | thread_pool (Percona/Enterprise)、調整 thread_cache_size |
| 架構層 | 讀寫分離、分庫分表、快取層 (Redis) 卸載讀流量 |
max_connections ≈ (CPU核心數 * 2~4) + (預期並發業務連接數 * 1.5)
-- 典型 8核生產環境:300~500 較合理,1000 需評估記憶體
-- 每連接約 256KB~2MB 記憶體 (依 sort_buffer、join_buffer 等)
無法修改配置時: