centos mysql连接数限制
小樊
36
2025-12-31 01:51:20
CentOS 下 MySQL 连接数限制与优化
一、快速定位与常见现象
- 查看当前最大连接数与已用连接:
- SHOW VARIABLES LIKE ‘max_connections’;
- SHOW STATUS LIKE ‘Threads_connected’;
- 典型现象:在 CentOS 7/8 上把 my.cnf 的 max_connections 调到 1000 后,实际仍为 214。这是因为 MySQL 每个连接会占用文件描述符,系统或 systemd 对 mysqld 的 open files limit 偏低,导致上限被“卡住”。官方文档也指出并发连接受平台文件句柄、内存与负载影响,必要时需提升 open-files-limit。
二、永久提升最大连接数的正确步骤
- 调整 MySQL 配置
- 编辑配置文件(路径可能为 /etc/my.cnf 或 /etc/my.cnf.d/*.cnf):
- 重启服务:systemctl restart mysqld
- 提升 systemd 服务限制(关键)
- 编辑服务文件(常见路径:/usr/lib/systemd/system/mysqld.service 或 /etc/systemd/system/mysqld.service.d/override.conf)
- 在 [Service] 段添加:
- LimitNOFILE=65535
- LimitNPROC=65535
- 使配置生效并重启:
- systemctl daemon-reload
- systemctl restart mysqld
- 提升系统级文件描述符(可选但推荐)
- 在 /etc/security/limits.conf 增加:
- mysql soft nofile 65535
- mysql hard nofile 65535
- 验证
- 登录 MySQL:SHOW VARIABLES LIKE ‘max_connections’; 应显示新值(如 2000)。
三、临时应急与上限控制
- 临时提高上限(重启失效):
- SET GLOBAL max_connections = 500;
- 处理“Too many connections”的应急
- 查看并终止占用过久的会话(需 SUPER 权限):
- SHOW PROCESSLIST;
- KILL [ID];
- 用户级上限(可选)
- 设置单个用户最大连接数:SET GLOBAL max_user_connections = 0;(0 表示不限制,谨慎使用)
四、合理取值与资源评估
- 默认值与上限认知
- MySQL 默认 max_connections 通常为 151;在资源充足、负载较轻的情况下,Linux 可支持 500–1000 并发连接,极端优化下可达 10000。盲目增大可能带来内存与调度压力。
- 取值建议
- 结合并发请求、应用连接池配置与服务器资源综合评估。以 8 核 16GB 为例,通常建议 200–500 起步,并通过监控逐步调优。
- 内存与参数配合
- 连接越多,内存占用越高;配合调整 wait_timeout / interactive_timeout 及时释放空闲连接,避免资源长期占用。
- 监控关键指标
- 持续观察 Threads_connected / Threads_running,并关注慢查询与连接池配置,优先提升连接利用率而非单纯增大上限。
五、排错清单
- 已改 my.cnf 仍只有 214:检查并修正 systemd 的 LimitNOFILE/LimitNPROC,执行 daemon-reload 与重启;必要时设置 open_files_limit。
- 修改后仍未生效:确认修改的是正确的配置文件段 [mysqld],且重启了 mysqld;用 SHOW VARIABLES LIKE ‘max_connections’; 复核。
- 仍报 “Too many connections”:结合 SHOW PROCESSLIST 清理异常/长时间空闲会话,并评估是否需要优化应用连接池与 SQL。