MySQL报错ERROR 1040 Can not connect to MySQL server. Too many connections

在开发过程中,遇到的MySQL连接数过多的问题

MySQL连接数默认是151,在开发过程中出现过多的连接处于sleep状态未被释放,超过了默认的最大连接数,然后报错连接数过多。如果完全连不上,那就停掉占用连接的应用,停了还是连不上就重启MySQL。如果连的上那就可以使用下面的SQL来操作。下面这些手段都是在数据库本身做限制,真正要解决这个问题还是要排查出产生这么多sleep连接的原因,可能是数据库连接池参数设置的不合理、跑的应用程序过多负载太大等等原因。

杀死sleep中的连接

查看连接数

show status like '%thread%'

其中Threads_connected就是现在存活的连接数

查看所有连接

show full processlist

ID字段就是连接数的线程ID,可以通过执行SQLkill ID;来杀死线程

批量生成结束进程SQL

一个一个去点然后复制ID太麻烦,可以通过查询来生成

select concat("kill ", ID, ";") as command
from information_schema.PROCESSLIST

可以写where条件来过滤需要杀死的线程,然后直接复制查询结果的命令执行即可

设置wait_timeout和interactive_timeout

wait_timeout

参数含义:服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)

interactive_timeout

参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)

查看wait_timeout和interactive_timeout

show variables like '%timeout%';

设置wait_timeout和interactive_timeout

如果在生产环境数据库无法重启可以暂时使用root账户来设置这两个参数,但是数据库重启就会恢复默认值,要永久生效还是要在MySQL的配置文件中修改

#不重启修改wait_timeout和interactive_timeout,时间单位是秒,设置多少时间可以根据自己的需求来
set global wait_timeout=100;
set global interactive_timeout=100;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值