如何解决这些问题,“SQL错误1040:连接太多” 即使我试着把
max_user_connection=500
仍然“连接太多”
答案 0 :(得分:27)
MySQL:ERROR 1040:连接太多
这基本上告诉MySQL同时处理最大连接数,默认情况下它同时处理 100 连接。
以下原因导致MySQL耗尽连接。
慢速查询
数据存储技术
错误的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量。
答案 1 :(得分:26)
值得一提的是,如果服务器分区或驱动器上的可用磁盘空间不足,这也会导致MySQL返回此错误。如果您确定不实际number of users connected,那么下一步就是检查您的MySQL服务器驱动器/分区上是否有可用空间。
编辑2019年1月:
MySQL 5.7和5.8也是如此。我不知道上面的版本。
答案 2 :(得分:18)
如果您的连接不完整,那么您可能没有关闭已打开的连接。
查看打开连接的代码,并确保尽快关闭连接。通常,您希望在实现 IDisposable (包括数据库连接)的任何内容周围使用 using 关键字,以确保这些对象在它们离开作用域后立即处置需要。
您可以使用此查询检查当前活动连接数:
show processlist
答案 3 :(得分:9)
您必须更改max_connections
以增加允许的总连接数。
并将max_user_connections
设置回默认值0 => 无限制除非您需要限制此用户连接。
答案 4 :(得分:8)
在您的程序中,您可以打开连接并在不关闭的情况下保持打开状态。
我遇到了同样的问题并最终确定了。
我在尝试捕获后添加了此代码。
finally{
try {
rs.close();
p.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 5 :(得分:6)
由于连接限制达到配置文件my.cnf
中定义的最大限制,会发生此错误。
为了解决此错误,请以root
用户身份登录MySQL(注意:您可以以root用户身份登录,因为,mysql将为root user
预先分配额外的一个连接)并增加< strong> max_connections 变量,使用以下命令:
SET GLOBAL max_connections = 500;
此更改将在那里,直到下次服务器重新启动。为了使此更改成为永久更改,您必须在配置文件中进行修改。你可以通过
来做到这一点vi /etc/my.cnf
[mysqld]
max_connections = 500
This article已逐步详细workaround to fix this error。看看它,我希望它可以帮助你。感谢。
答案 6 :(得分:2)
要查看您的数据库使用了多少个连接,请执行以下操作:
select @@max_connections;
要更改它:
set global max_connections = 200;
要查看当前连接的数量:
show processlist;
我还写了this piece of software来帮助我创建一个不错的交易电子表格,这样我就可以找出问题所在:
答案 7 :(得分:1)
试试这个:
打开终端并输入以下命令:sudo gedit /etc/mysql/my.cnf
将该行粘贴到my.cnf文件中:set-variable=max_connections=500
答案 8 :(得分:0)
检查当前正在运行的应用程序是否仍在访问您的mysql并消耗了所有数据库连接。
因此,如果您尝试从工作台访问mysql,您将得到太多的连接&#34;错误。
停止当前正在运行的Web应用程序,该应用程序将保留所有这些数据库连接,然后您的问题将得到解决。
答案 9 :(得分:0)
在https://dev.mysql.com/doc/refman/8.0/en/too-many-connections.html中明确指出了该问题:
如果客户端在尝试进行以下操作时遇到太多连接错误 连接到MySQL服务器,所有可用连接正在被使用 其他客户。
几分钟后我解决了该问题,似乎其他客户端释放了连接,我也尝试同时重新启动vs和工作台。
答案 10 :(得分:0)
即使我的所有连接都包装在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
}
}
请记住,直到循环中的所有操作都完成,连接才会关闭;如果循环创建了更多的连接,则它们真的可以开始累加。
这更好:
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
}
这样一来,您就可以关闭连接并在执行其他操作之前释放回线程池
答案 11 :(得分:0)
此问题主要发生在已超过 MySQL 的最大允许并发连接数时。
允许的最大连接数存储在全局变量 max_connections 中。
你可以通过 MySQL 中的 show global variables like max_connections;
来查看
您可以通过以下步骤修复它:
第一步:
登录 MySQL 并运行此命令:SET GLOBAL max_connections = 100;
现在登录到 MySQL,修复了连接过多的错误。此方法不需要重启服务器。
步骤 2:
使用上面的步骤 1 可以解决这个问题,但是当 mysql 重新启动时 max_connections 将回滚到其默认值。
为了使 max_connection 值永久,请更新 my.cnf 文件。
停止 MySQL 服务器:Service mysql stop
编辑配置文件my.cnf:vi /etc/mysql/my.cnf
在mysqld部分找到变量max_connections。
[mysql]
max_connections = 300
设置为更高的值并保存文件。
启动服务器:Service mysql start
注意: 在增加 max_connections 变量值之前,请确保服务器有足够的内存用于新的请求和连接。
MySQL 为每个连接预先分配内存,并仅在连接关闭时解除分配。当新连接被查询时,系统应该有足够的内存、网络和计算能力等资源来满足用户的请求。
此外,您应该考虑增加 MySQL 服务器中的打开表限制以适应额外的请求。最后。关闭服务器上已完成事务的连接非常重要。
答案 12 :(得分:0)
问题通过重启数据库 windows 服务解决