如何修复这些,“SQL错误1040:连接太多”,即使我试着把它
max_user_connection=500
仍然“连接太多”
MySQL:ERROR 1040:连接太多
这基本上告诉MySQL同时处理最大连接数,默认情况下它同时处理100个连接。
以下原因导致MySQL耗尽连接。
通过以下方式我能够克服这个问题。
打开MySQL command line tool
并输入,
show variables like "max_connections";
这将返回你这样的东西。
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 100 |
+-----------------+-------+
您可以将设置更改为例如通过发出以下命令200而不必重新启动MySQL服务器。
set global max_connections = 200;
现在,当您下次重新启动MySQL时,它将使用此设置而不是默认设置。
请记住,增加连接数将增加MySQL运行所需的RAM量。
值得一提的是,如果服务器分区或驱动器上的可用磁盘空间不足,这也会导致MySQL返回此错误。如果您确定它不是真正的number of users connected,那么下一步是检查MySQL服务器驱动器/分区上是否有可用空间。
编辑2019年1月: MySQL 5.7和5.8也是如此。我不知道上面这个版本。
如果你没有这样的连接,很可能你没有关闭你打开的连接。
查看打开连接的代码,并确保尽快关闭连接。通常,您希望在实现IDisposable(包括数据库连接)的任何内容周围使用using关键字,以确保在将这些对象放置到需要它们的范围时立即对其进行处置。
您可以使用此查询检查当前活动连接数:
show processlist
您必须更改max_connections
以增加允许的总连接数。
并将max_user_connections
设置回默认值0 =>无限制,除非您需要限制每个用户连接。
在您的程序中,您将打开连接并保持打开而不关闭它。
我遇到了同样的问题并最终确定了。
在try catch之后我添加了这段代码。
finally{
try {
rs.close();
p.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
由于连接限制达到最大限制(在配置文件my.cnf
中定义),会发生此错误。
为了解决这个错误,请以root
用户身份登录MySQL(注意:您可以以root身份登录,因为,mysql将为root user
预先分配一个连接)并使用以下命令增加max_connections变量:
SET GLOBAL max_connections = 500;
此更改将在那里,直到下次服务器重新启动。为了使此更改成为永久更改,您必须在配置文件中进行修改。你可以这样做,
vi /etc/my.cnf
[mysqld]
max_connections = 500
This article已逐步详细介绍workaround to fix this error。看看它,我希望它可以帮助你。谢谢。
试试这个 :
打开终端并输入以下命令:sudo gedit /etc/mysql/my.cnf
将该行粘贴到my.cnf文件中:set-variable=max_connections=500
检查当前正在运行的应用程序是否仍在访问您的mysql并消耗了所有数据库连接。
因此,如果您尝试从工作台访问mysql,则会出现“连接太多”错误。
停止当前运行的Web应用程序,该应用程序将保留所有这些数据库连接,然后您的问题将得到解决