錯誤訊息:
Too many connections
Too many connections
MySQL Too many connections 是資料庫最常見的連線錯誤之一,代表目前連線數已達上限,新連線無法建立。 這個問題常出現在高流量網站、API 系統、電商平台或未正確釋放連線的應用程式中。
許多使用者會誤以為只要調整 max_connections 就能解決,但實際上真正原因通常來自應用層設計不良或查詢行為不佳。 本篇將從「設定 + 架構 + 除錯」三個面向完整解析。
一、MySQL Too many connections 發生原因
- max_connections 設定過低
- 網站或 API 沒有釋放資料庫連線
- 瞬間流量暴增(流量尖峰)
- 長時間執行 SQL 未結束
- 程式使用錯誤的 connection pooling
👉 MySQL 預設 max_connections 約 151,對現代網站通常偏低
二、快速修復(CentOS / MySQL 設定)
修改設定檔:
/etc/my.cnf.d/server.cnf
[mysqld] max_connections = 300
⚠️ 設定修改後不會立即生效,必須重新啟動 MySQL
🔧 重新啟動 MySQL(必要步驟)
systemctl restart mysqld
👉 注意:只有重新啟動 mysqld,新的 max_connections 設定才會被載入。
🔍 檢查是否生效
mysql -u root -p SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';
✔ Threads_connected 可以觀察目前即時連線數
三、進階排查(真正問題常在這裡)
🔍 查看目前連線
SHOW PROCESSLIST;
⚠️ 常見問題來源
- PHP / CodeIgniter 未正確關閉 DB connection
- API 每次 request 都建立新連線
- 背景排程(cron job)未釋放連線
- 查詢時間過長導致連線堆積
👉 如果只調 MySQL,但程式沒修,問題一定會再發生
四、最佳優化策略(工程師建議)
- 使用 connection pooling(連線池)
- 避免 persistent connection 濫用
- 優化 SQL 執行時間
- 加快 API response time
✔ 核心觀念:不是「增加連線」,而是「減少浪費連線」
延伸閱讀(MySQL 錯誤排除系列(2026)
FAQ 常見問題
MySQL Too many connections 是什麼意思?
代表資料庫連線數已達上限,新連線無法建立,通常因 max_connections 太低或流量過高造成。
調整 max_connections 就能解決嗎?
只能暫時緩解,如果應用程式沒有正確釋放連線,問題仍會再次發生。
預設 max_connections 是多少?
MySQL 預設約 151,對高流量網站通常不夠用。
會影響網站嗎?
會,當連線滿時網站將無法存取資料庫,導致服務中斷。
如何找出佔用連線的程式?
使用 SHOW PROCESSLIST 可以查看目前所有連線與執行狀態。
CodeIgniter 會造成這問題嗎?
如果沒有正確關閉 DB connection,確實可能導致連線累積。
提高 max_connections 有風險嗎?
有,過高會增加 RAM 使用量,每個連線都會占用資源。
最佳解決方式是什麼?
優化 SQL + 控制應用程式連線 + 適度調整 max_connections,而不是單純調高數值。
這個錯誤常見嗎?
非常常見,特別是在流量成長或未做連線管理的系統中。
這是 MySQL 錯誤排除系列文章之一,包含記憶體、連線、鎖定三大類問題。
