解决mysql报错:too many connections

关键操作

# 重启mysql数据库
service mysqld restart

# 登录数据库后设置最大连接数
mysql> set GLOBAL max_connections=1000;

公司的前端开发工程师在测试前端页面的时候,反馈说有一个接口报错了,我就在开发环境测试了以下,发现没问题啊,他也跟我反馈说现在可以了,刚刚不知道为什么报错了。

我跟他说,不可能接口一下子可以用一下子不可以用的,你检查一下你的入参是不是有问题。

后来他还是反馈说一下子可以一下子不可以,我就登录公司项目服务器查看日志,原来是连接数爆满问题。

于是想登录mysql服务器修改一下连接数,发现连mysql都登录不上了:

mysql -uroot -p'密码'

只能先重启一下mysql服务:

service mysqld restart

查看了一下重启后的连接数:发现重启后就有81个连接数被占用了,且大部分为sleep状态(因为每个服务都配置了连接池,且设置最小连接数为5,当所有服务都启动之后,每个服务就会先创建5个连接等待调用,那也就所剩无几了)。

mysql> show processlist;

再查看一下设置的最大连接数有多少:发现仅为默认的151,难怪会爆满。

mysql> show variables like 'max_connections';

全局设置mysql最大连接数为1000:

mysql> set GLOBAL max_connections=1000;

但这也不是一劳永逸的方法,所以另一个办法就是修改连接的超时时间,

查看mysql对于连接后无操作多长时间后会自动关闭:

mysql> show global variables like 'wait_timeout';

结果是28800s,也就是8个小时,可以通过设置减小这个等待时间来压缩连接的睡眠时间,但需要注意的是,正在使用的连接到了时间也会被关闭,因此这个时间点一定要设置恰当。

set global wait_timeout = 时间数(秒)

#表示mysql在关闭一个连接之前要等待的秒数
set global interactive_timeout = 时间数(秒)
posted @ 2020-04-16 16:10  程序员微尘  阅读(214)  评论(0编辑  收藏  举报