首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 「Too many connections」解決:調大 max_connections、排查連接洩漏、優化連接池

     編輯:MySQL 資料庫相關知識

報錯 ERROR 1040 (HY000): Too many connections,意味著當前連接數達到 max_connections 上限(默認 151,舊版 100)。

即時緩解

-- 運行時動態調整(無需重啟,MySQL 5.7+)
SET GLOBAL max_connections = 1000;
-- 永久生效
# /etc/my.cnf
[mysqld]
max_connections = 2000

重啟後生效。Linux 內核參數 fs.file-max、net.core.somaxconn、ulimit -n 同步調大。

根因排查清單

現象可能原因排查命令
連接數緩慢上升不降應用連接池洩漏(未 close/return)SHOW PROCESSLIST; 觀察 Sleep 狀態堆積
突發尖峰定時任務/批量導入並發過高SHOW GLOBAL STATUS LIKE 'Max_used_connections';
長事務阻塞事務未提交持有連接SELECT * FROM information_schema.INNODB_TRX;
連接池配置過大多實例共享物理機,總和超限檢查 HikariCP/Druid maximumPoolSize

最佳實踐

  1. 連接池:maximumPoolSize = (CPU核心數 * 2) + 有效磁盤數,配合 idleTimeout=30000、maxLifetime=1800000。
  2. 應用層:try-with-resources / finally { close(); } 確保歸還;Spring @Transactional 避免長事務。
  3. 監控告警:Threads_connected / max_connections > 80% 觸發告警。
  4. 只讀實例:讀寫分離,主庫只承擔寫入,從庫承擔讀取,單實例連接壓力降 50%+。

特權連接

MySQL 保留 1 個 SUPER 連接槽(max_connections+1),管理員可在連接滿時登入 SHOW PROCESSLIST 搶救現場。

配置模板(4C8G 典型)

[mysqld]
max_connections = 2000
open_files_limit = 65535
table_open_cache = 4000
thread_cache_size = 100
back_log = 200
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved