MySQL 默認 max_connections=100` 遠不能滿足高併發場景。本文講解動態調整、持久化配置、連接池協同調優全鏈路方案。
SHOW VARIABLES LIKE 'max_connections'; -- 默認 151 (5.7+) / 100 (舊版)
SHOW STATUS LIKE 'Threads_connected'; -- 當前連接數
SHOW STATUS LIKE 'Max_used_connections'; -- 歷史峰值
SHOW GLOBAL STATUS LIKE 'Connection_errors_max_connections'; -- 拒絕連接計數
SET GLOBAL max_connections = 1000;
-- 或
mysqladmin -uroot -p variables max_connections=1000
# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
max_connections = 2000
# 關聯參數同步調大
open_files_limit = 65535 -- 系統文件句柄上限
table_open_cache = 4000 -- 表緩存
max_user_connections = 1800 -- 單用戶上限 (預留 200 給管理員)
back_log = 200 -- 聽隊列長度
系統級限制同步修改:
# /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535
# /etc/sysctl.conf
fs.file-max = 1000000
net.core.somaxconn = 65535
# sysctl -p 生效
| 連接池 | 核心參數 | 建議值 (8核16G 例) |
|---|---|---|
| HikariCP (Java) | maximumPoolSize | 50-100 (CPU核心數 * 2-4) |
| Druid (Java) | maxActive | 同上 |
| PgBouncer (PG/MySQL) | max_client_conn | 1000+ (連接復用) |
| ProxySQL | mysql-max_connections | 後端總和 * 0.8 |