報錯 ERROR 1040 (HY000): Too many connections 表示當前活躍連接數達到 max_connections 上限。默認值 151(5.7+),理論最大 16384。
# /etc/my.cnf [mysqld] max_connections = 500
組件 典型佔用 系統預留 1-2 GB innodb_buffer_pool_size 物理內存 60-75% query_cache_size 建議 0(5.7 廢棄) 線程棧 (thread_stack) 256 KB(默認) 排序/連接緩存 sort_buffer_size + join_buffer_size × 連接數 示例:16 GB 內存服務器
[mysqld] max_connections = 2000 # 文件句柄限制(OS 層面) open_files_limit = 65535 # 連接緩存 thread_cache_size = 200 # 緩存空閒線程,減少創建銷毀開銷 back_log = 200 # TCP 接收隊列,突發連接緩衝 # 避免單連接佔用過多內存 sort_buffer_size = 2M join_buffer_size = 2M read_rnd_buffer_size = 2M # 監控指標 # show global status like 'Threads_connected'; # show global status like 'Max_used_connections'; # show global status like 'Connection_errors_max_connections';最佳實踐總結
- 監控先行:Grafana 告警
Max_used_connections / max_connections > 80%- 連接池:應用層必須配置連接池(HikariCP/Druid),避免頻繁建連
- 超時回收:
wait_timeout=28800、interactive_timeout=28800釋放空閒連接- 分級限流:ProxySQL/MaxScale 實現租戶級連接數配額
- 壓測驗證:
sysbench --threads=2000 --time=300 oltp_read_write run驗證穩定性