MYSQL专题(七):Too Many Connections的原因和解决方案

ERROR 1040(HY000):Too many connections

  • 数据库的整体架构,数据库自己也有一个连接池,你的每个系统部署在一台机器上的时候,你那台机器上部署的系统实例/服务自己也是一个连接池的,你的系统每个连接Socket 都会对应着数据库连接池里的一个连接socket。
  • 当数据库报错Too many connections的时候,就是说他的连接池的连接已经满了,你的业务不能跟他建立更多的连接了。
max_connections
  • 我们的mysql配置文件my.cnf,里面有一个关键的参数max_connections,就是mysql能建立的最大连接数,默认设置为800
  • 我们用命令查看一下
show variables like 'max_connections'

此时你可以看到mysql仅仅建立了214个连接而已;mysql根本不管我们设置的那个max_connections,就是直接强行把最大连接数设置为214.(mysql源码通过计算公式计算的)

mysql限制最大连接数的原因
  • 原因时因为底层的linux操作系统把进程可以打开的文件句柄数限制为1024了,导致mysql最大连接数时214
    在这里插入图片描述
解决方案
# 修改linux的文件句柄限制
ulimit -HSn 65535


# 可以通过如下命令查看最大句柄数是否被修改
cat /etc/security/limits.conf
cat /etc/rc.local
  • 重启服务器之后,linux的最大文件句柄就会生效了,mysql的最大连接数也会生效了。
linux的ulimit
  • linux默认会限制每个进程对机器资源的使用,包括可以打开的文件句柄的限制,可以打开的子进程数的限制,网络缓存的限制,最大可以锁定的内存大小,
  • 一般在生产环境部署了一个系统,比如数据库系统,消息中间件系统,存储系统,缓存系统之后,都需要调整linux的一些内核参数,这个文件句柄的数量是一定要调整的,通常都设置为65535
  • 可以用ulimit命令来设置每个进程被限制使用的资源量,用ulimit -a就可以看到进程被限制使用的各资源的量。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值