网站出现 SQLSTATE: Too many connections 时,临时提高 MySQL 的 max_connections 可能恢复访问,但也可能让数据库在更高并发下耗尽内存。

SHOW STATUS LIKE 'Threads_connected';
SHOW FULL PROCESSLIST;
SHOW VARIABLES LIKE 'max_connections';

先观察连接是大量 Sleep,还是都在执行相同慢查询。PHP-FPM 子进程过多、Cron 重叠、消费者数量失控,会同时放大数据库连接。某个扩展在循环中重复创建资源连接,也会导致连接快速增长。

若连接都被长事务占住,检查未提交事务、锁等待和慢查询。数据库升级参数前,应结合每个连接的内存开销评估服务器容量。

稳定方案通常包含:限制应用进程并发、修复慢 SQL、让长任务拆批、正确配置读写节点,并为数据库保留管理连接。只重启 MySQL 会清掉现场证据,最好先保存 processlist 与监控曲线,再处理故障。