1、报错信息如下:
连接MySQL数据库提示:1040 Too many connections:

2、原因:
由于数据库连接数量,超过了数据库的最大连接数。
PS:因为这些数据库连接数,处于sleep状态,但是还没有被清除掉。
查看原因:
1)登录数据库
登录服务器,输入命令:
mysql -uroot -p
输入数据库登录密码后,登录成功。
2)查看数据库进程状态
show status like 'Threads%';

treads_cached :缓冲池中的线程数。
Threads_connected:当前连接(运行和睡眠)中的线程数。
Threads_created :创建过连接的线程数。
Threads_running:当前运行(没有睡眠)中的线程数。
总共连接了:152个。
3)查看数据库最大连接数
show variables like '%max_connection%';

最大连接数:151个,小于当前连接总数152,所以提示:Too many connections。
4)查看清除Sleep连接数时间
show variables like 'wait_timeout';

清除时间间隔为:28800秒(8小时),连接后8小时清除掉。
3、解决方法:
解决方法优先按下面1、2、3的顺序:
1)排查代码问题
看看到底哪里产生的连接数过多,有可能是代码比如定时任务引起的问题。
2)增加最大连接数
set GLOBAL max_connections=1000;
比如,改为1000个连接数:

3)改小清除Sleep连接数时间
set GLOBAL wait_timeout=14400;
改成4小时清除或者更短的时间间隔。
当尝试连接MySQL数据库时遇到1040错误,表示连接数超过最大限制。问题源于sleep状态的连接未被及时清理。查看到当前连接数为152,超过了最大连接数151。解决方法包括:1) 检查并优化代码以减少不必要的连接;2) 增加最大连接数,如设置`max_connections=1000`;3) 缩短`wait_timeout`值,如设为14400秒,以便更快清理闲置连接。
3795

被折叠的 条评论
为什么被折叠?



