查看当前最大连接数设置
MySQL 启动后默认的
max_connections通常只有 151,高并发场景下很快会触发
Too many connections错误。先确认当前值:
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
注意:这个值是运行时参数,重启后若未持久化配置会恢复默认。
临时修改 max_connections(重启失效)
适合快速验证或测试,无需重启服务:
登录 MySQL 后执行:SET GLOBAL max_connections = 2000;该命令要求有
SYSTEM_VARIABLES_ADMIN权限(MySQL 8.0+)或
SUPER权限(旧版本) 立即生效,但仅对当前实例有效;服务重启后还原 如果报错
Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN privilege(s),说明账号权限不足,需用 root 或授权后的账号操作
永久修改 max_connections(需配置文件)
修改 MySQL 配置文件(如
/etc/my.cnf或
/etc/mysql/mysql.conf.d/mysqld.cnf),在
[mysqld]段落下添加:
[mysqld] max_connections = 2000
然后重启服务:
sudo systemctl restart mysql
常见坑点:
配置文件路径因安装方式而异:apt 安装多在/etc/mysql/,源码编译可能在
/usr/local/mysql/etc/,Docker 容器需挂载并检查入口脚本是否覆盖配置 确保修改的是
[mysqld]而非
[client]或
[mysql]段落,后者无效 某些云数据库(如阿里云 RDS、腾讯云 CDB)禁止修改该参数,需通过控制台调整规格或提交工单
验证修改是否生效且资源够用
改完别急着上线,要检查两件事:
确认新值已加载:mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"检查系统级限制:MySQL 实际能创建的连接数受
open_files_limit和操作系统
ulimit -n制约。若
max_connections设为 3000,但
open_files_limit只有 1024,MySQL 会自动下调到安全值并写入错误日志 观察内存占用:每个连接至少消耗 256KB~1MB 内存(取决于 buffer 设置),设过高可能导致 OOM;建议按公式粗估:
总内存 ≈ max_connections × (sort_buffer_size + read_buffer_size + …) + 全局缓冲池
真正卡住人的往往不是配置没写对,而是没意识到 OS 层或内存配额已经成了瓶颈。
