直接修改配置文件并重启mysql才真正生效,命令行set global仅临时有效;xampp中需在[mysqld]段下设max_connections,保存后通过控制面板重启,并检查ulimit限制及应用层连接释放。

直接改配置文件并重启 MySQL 才真正生效,命令行临时设置 set global max_connections 一重启就丢。
确认当前最大连接数是多少
进 XAMPP 控制面板启动 MySQL 后,用命令行或 phpMyAdmin 执行:
SHOW VARIABLES LIKE 'max_connections';
默认值通常是 151(不是 100,也不是 200),这个值在没改任何配置时就存在。别只看 show status 里的 Threads_connected,那是当前已连上的数量,不是上限。
修改 my.ini(Windows)或 my.cnf(Linux/macOS)
XAMPP 的 MySQL 配置文件路径不统一,常见位置有:
- Windows:
C:\xampp\mysql\bin\my.ini或C:\xampp\mysql\my.ini - Linux/macOS:
/opt/lampp/etc/my.cnf
关键点是:必须把 max_connections 放在 [mysqld] 段落下,不能写在 [client] 或文件开头空白处。例如:
[mysqld] max_connections = 1000
改完保存,**必须通过 XAMPP 控制面板重启 MySQL 服务**,不能只关再开,要确保进程完全重载配置。
为什么设了 1000 却只生效到 214?
这是操作系统级限制在捣鬼,尤其在 Linux/macOS 上更常见。XAMPP 自带的 MySQL 会受系统 ulimit -n(打开文件数上限)约束。表现就是你设了 max_connections=1000,但实际查出来是 214 或 234。
解决方法分两步:
- 检查当前限制:
ulimit -n,如果输出是1024或更低,大概率就是它卡住了 - 临时提高(仅当前 session):
ulimit -n 65536 - 永久生效需改系统服务配置(如 systemd 下的
mariadb.service加LimitNOFILE=65536),但 XAMPP 默认不用 systemd,所以更简单的是——在启动 XAMPP 前先运行ulimit -n 65536,再点控制面板启动
Windows 用户一般不遇此问题,但要注意:某些版本的 XAMPP(尤其是旧版)自带的 my.ini 可能被隐藏或被多个同名文件覆盖,建议用编辑器(如 Notepad++、VS Code)全盘搜索 max_connections,确认只有一处生效。
别信“改完就能用”的错觉
即使配置和 ulimit 都调对了,还得看应用层是否真的用得上。比如 PHP 的 mysql_connect() 或 PDO 连接池没配好,连接不释放、超时时间太长,照样会报 Too many connections。这时候查 SHOW PROCESSLIST,常能看到一堆 Sleep 状态的僵尸连接——那不是 MySQL 限制造成的,是代码没关连接。
真正改完后验证,不能只看 SHOW VARIABLES,还要模拟并发压测,观察 Threads_connected 是否真能冲到接近你设的值,且不崩。











