MySQL 连接数打满(Too many connections)排查与根治
2026-08-11 01:32:30
# 数据库
应用突然大面积报错 Too many connections,是 MySQL 最典型的“雪崩”故障之一。本文讲清如何快速止血、再根治。
一、快速判断
1 | SHOW VARIABLES LIKE 'max_connections'; -- 当前上限 |
当 Threads_connected 逼近 max_connections,新连接就会被拒。
二、临时止血
1 | SET GLOBAL max_connections = 2000; -- 临时调大(重启失效) |
同时清理“占着不干活的”连接:
1 | -- 找出 sleep 时间过长的连接 |
三、永久生效
在 my.cnf 调整并重启:
1 | max_connections = 2000 |
四、根因与根治
连接打满通常不是“上限设小了”,而是连接泄漏:
- 应用连接池配置不当:
maxPoolSize过大或连接未归还。检查 HikariCP/Druid 配置。 - 慢查询堆积:一条慢 SQL 占住连接,请求排队把池子耗尽。先治慢查询。
- sleep 连接过多:
wait_timeout设得太大,及时回收空闲连接。
五、预防
- 应用侧用连接池并设合理上限;
- 监控
Threads_connected / max_connections比例,超过 80% 告警; - 对核心库保留
superuser连接余量(max_user_connections)。
小结
Too many connections 先 SET GLOBAL 临时扩容 + KILL 空闲连接止血,再回头查连接池与慢查询,才是根治之道。