温馨提示×

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):
      • [mysqld]
        • max_connections = 2000
    • 重启服务: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。

0