MySQL Too many connections 錯誤解決(2026)|max_connections 設定與連線數爆滿排除

MySQL Too many connections 錯誤解決(2026)|max_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 錯誤排除系列文章之一,包含記憶體、連線、鎖定三大類問題。

    PAGE TOP