mySQL错误1040:连接太多
如何修复这些“SQL错误1040:连接太多” 甚至我也试着mySQL错误1040:连接太多,mysql,connection,Mysql,Connection,如何修复这些“SQL错误1040:连接太多” 甚至我也试着 max_user_connection=500 仍然是“连接太多”如果像这样的连接正在耗尽,那么很有可能您没有关闭已打开的连接 检查打开连接的代码,并确保尽快关闭连接。通常,您希望在实现IDisposable(包括数据库连接)的任何对象周围使用using关键字,以确保这些对象一离开所需的作用域就被释放 您可以使用此查询检查当前活动连接数: show processlist 参考:您必须更改最大连接数,以增加允许的总连接数 并将max
max_user_connection=500
仍然是“连接太多”如果像这样的连接正在耗尽,那么很有可能您没有关闭已打开的连接 检查打开连接的代码,并确保尽快关闭连接。通常,您希望在实现IDisposable(包括数据库连接)的任何对象周围使用using关键字,以确保这些对象一离开所需的作用域就被释放 您可以使用此查询检查当前活动连接数:
show processlist
参考:您必须更改
最大连接数
,以增加允许的总连接数
并将max\u user\u connections
设置回默认值0=>无限制,除非您需要限制此每个用户的连接
试试这个:
打开终端并键入以下命令:sudogedit/etc/mysql/my.cnf
将该行粘贴到my.cnf文件中:
set variable=max\u connections=500
在您的程序中,您本可以打开连接,但不关闭它
我也遇到了同样的问题,并最终找到了答案
我在try catch之后添加了这段代码
finally{
try {
rs.close();
p.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
值得一提的是,如果服务器分区或驱动器上的可用磁盘空间不足,这也会导致MySQL返回此错误。如果您确定它不是实际的,那么下一步是检查MySQL服务器驱动器/分区上是否有可用空间 2019年1月编辑:
MySQL 5.7和5.8也是如此。我不知道上面的版本。MySQL:错误1040:连接太多 这基本上说明MySQL同时处理最大数量的连接,默认情况下它同时处理100个连接 以下这些原因导致MySQL连接耗尽
show variables like "max_connections";
这会让你得到这样的回报
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 100 |
+-----------------+-------+
您可以通过发出以下命令将设置更改为例如200,而无需重新启动MySQL服务器
set global max_connections = 200;
现在,当您下次重新启动MySQL时,它将使用此设置而不是默认设置
请记住,连接数的增加将增加MySQL运行所需的RAM量。检查当前运行的应用程序是否仍在访问MySQL,是否已使用所有数据库连接 所以,如果您试图从workbench访问mysql,就会出现“连接太多”错误
停止当前正在运行的web应用程序,该应用程序保留所有这些db连接,然后您的问题将得到解决。由于连接限制达到配置文件
my.cnf
中定义的最大限制,因此会发生此错误
为了修复此错误,请以root
用户身份登录MySQL(注意:您可以以root用户身份登录,因为MySQL将为root用户
预先分配额外的一个连接),并使用以下命令增加max\u connections变量:
SET GLOBAL max_connections = 500;
在下次服务器重新启动之前,此更改将一直存在。为了使此更改永久化,您必须在配置文件中进行修改。你可以通过
vi /etc/my.cnf
[mysqld]
max_connections = 500
一步一步的详细。看一看,我希望它能帮助你。谢谢。要查看为您的数据库配置了多少连接,请执行以下操作:
select @@max_connections;
要更改它,请执行以下操作:
set global max_connections = 200;
要查看当前连接了多少网络,请执行以下操作:
show processlist;
我还写了一封信,帮助我创建一个很好的事务电子表格,这样我就可以跟踪哪些查询是问题所在:
该问题在以下章节中明确指出: 如果客户端在尝试连接时遇到太多连接错误 连接到MySQL服务器,所有可用的连接都被 其他客户
我在几分钟后解决了这个问题,似乎其他客户端已经释放了连接,同时我也尝试重新启动vs和workbench。我遇到了这个错误,尽管我的所有连接都被包装在using语句中。我忽略的是这些连接保持开放的时间 我是这样做的:
using (MySqlConnection conn = new MySqlConnection(ConnectionString))
{
conn.Open();
foreach(var m in conn.Query<model>(sql))
{
// do something that takes a while, accesses disk or even open up other connections
}
}
使用(MySqlConnection conn=newmysqlconnection(ConnectionString))
{
conn.Open();
foreach(conn.Query(sql)中的var m)
{
//做一些需要一段时间的事情,访问磁盘,甚至打开其他连接
}
}
请记住,在循环中的所有操作完成之前,连接不会关闭,如果循环创建更多连接,它们就可以真正开始累积
这样更好:
List<model> models = null;
using (MySqlConnection conn = new MySqlConnection(ConnectionString))
{
conn.Open();
models = conn.Query<model>(sql).ToList(); // to list is needed here since once the connection is closed you can't step through an IEnumerable
}
foreach(var m in models)
{
// do something that takes a while, accesses disk or even open up other connections
}
List models=null;
使用(MySqlConnection conn=newmysqlconnection(ConnectionString))
{
conn.Open();
models=conn.Query(sql).ToList();//此处需要列出,因为一旦连接关闭,就无法单步执行IEnumerable
}
foreach(模型中的var m)
{
//做一些需要一段时间的事情,访问磁盘,甚至打开其他连接
}
这样,您的连接就可以关闭,并在执行其他操作之前释放回线程池此问题主要发生在超过MySQL允许的最大并发连接数时。 允许的最大连接数存储在global变量max_connections中。 您可以通过
显示诸如max\u connections之类的全局变量来检查它
您可以通过以下步骤进行修复:
步骤1:
登录MySQL并运行以下命令:SET GLOBAL max_connections=100代码>
现在登录MySQL,太多了