max_connections默认值为151,用于限制最大并发连接数;若频繁出现“too many connections”错误,可临时执行set global max_connections=2000(需root权限),或永久修改my.cnf中[mysqld]段的max_connections值并重启服务。

查当前max_connections值,别猜
直接连进MySQL命令行,执行:SHOW VARIABLES LIKE 'max_connections';。XAMPP默认值通常是151,远不够中等流量应用使用。注意,这个值不是“当前用了多少”,而是“最多允许多少个连接同时存在”。如果返回结果是151,而你的应用在高峰期频繁报Too many connections,那基本可以确定是它卡住了。
临时调高只对当前会话有效,重启就丢
想快速验证效果,可用SQL临时修改:SET GLOBAL max_connections = 2000;。但要注意三点:
- 必须用
root权限执行,普通用户无权改 - 该设置在MySQL服务重启后失效,仅用于测试或应急
- 如果系统级文件描述符没跟上(见下一点),实际仍无法达到2000
永久生效要改my.ini,且路径容易错
XAMPP的配置文件不在C:\Windows\my.ini,也不在C:\my.ini——绝大多数人改错位置就白忙。真实路径是:D:\xampp\mysql\bin\my.ini(假设XAMPP装在D盘)。打开后找到[mysqld]段,在其下方添加一行:max_connections = 2000。保存后必须重启XAMPP控制面板里的MySQL服务,否则不加载新配置。
常见坑:my.ini里可能有多个max_connections,比如被注释掉的老配置,或者出现在[client]段——只有[mysqld]段下的才生效。
ulimit和wait_timeout才是真瓶颈
即使把max_connections设到5000,连接数还是上不去?大概率是系统限制或连接没释放。两个关键点:
-
ulimit -n(Linux)或Windows服务的句柄限制:XAMPP在Windows下跑,本质是Windows服务,需确认mysqld.exe进程能打开的文件数是否够用(一般默认2048,2000连接基本够,但若同时开大量临时表或日志,可能不够) -
wait_timeout默认8小时,意味着空闲连接会挂住整整8小时不释放。线上建议设为300(5分钟):SET GLOBAL wait_timeout = 300;,并写入my.ini同位置
真正压垮数据库的,往往不是并发峰值,而是几百个Sleep状态的长连接占着不动——用SHOW PROCESSLIST;一眼就能看到。











