mySQL错误1040:连接太多

kel*_*vzy 34 mysql connection

如何修复这些,"SQL错误1040:连接太多",即使我试着把它

max_user_connection=500
Run Code Online (Sandbox Code Playgroud)

仍然"连接太多"

Dul*_*sta 35

MySQL:ERROR 1040:连接太多

这基本上告诉MySQL同时处理最大连接数,默认情况下它同时处理100个连接.

以下原因导致MySQL耗尽连接.

  1. 慢查询

  2. 数据存储技术

  3. 错误的MySQL配置

通过以下方式我能够克服这个问题.

打开MySQL command line tool并打字,

show variables like "max_connections";
Run Code Online (Sandbox Code Playgroud)

这将返回你这样的东西.

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 100   |
+-----------------+-------+
Run Code Online (Sandbox Code Playgroud)

您可以通过发出以下命令将设置更改为例如200,而无需重新启动MySQL服务器.

set global max_connections = 200;
Run Code Online (Sandbox Code Playgroud)

现在,当您下次重新启动MySQL时,它将使用此设置而不是默认设置.

请记住,增加连接数将增加MySQL运行所需的RAM量.

  • 请注意:新的默认 max_connections 为 151。请参阅 https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html (3认同)

Mar*_*tin 29

值得一提的是,如果服务器分区或驱动器上的可用磁盘空间不足,这也会导致MySQL重新出现此错误.如果您确定它不是实际连接的用户数,那么下一步是检查MySQL服务器驱动器/分区上是否有可用空间.

编辑2019年1月:
MySQL 5.7和5.8都是如此.我不知道上面这个版本.

  • 可用磁盘空间不足会导致 MySQL 在“INSERT”或“UPDATE”完成之前等待,从而导致挂起的用户连接数量增加,直到达到限制。 (2认同)

Eri*_* J. 19

如果你没有这样的连接,很可能你没有关闭你打开的连接.

查看打开连接的代码,并确保尽快关闭连接.通常,您希望在实现IDisposable(包括数据库连接)的任何内容周围使用using关键字,以确保在将这些对象放置到需要它们的范围时立即对其进行处置.

您可以使用此查询检查当前活动连接数:

show processlist
Run Code Online (Sandbox Code Playgroud)

参考:MySQL显示状态 - 活动连接还是总连接?

  • 如果有人要在将近两年后否决某个答案,那么留下一个否决理由对我和整个社区都会有所帮助。 (2认同)

Sir*_*ufo 10

您必须更改max_connections以增加允许的总连接数.

并设置max_user_connections回默认值0 => 无限制,除非您需要限制每个用户连接.

MySQL连接太多


小智 8

在你的程序中,你可以打开连接并保持打开而不关闭它.

我遇到了同样的问题并最终确定了.

在try catch之后我添加了这段代码.

finally{
    try {
        rs.close();
        p.close();
        conn.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)


rat*_*DBA 8

由于连接限制达到配置文件中定义的最大限制,因此会发生此错误my.cnf

为了解决此错误,请以root用户身份登录MySQL (注意:您可以以root用户身份登录,因为mysql将为预先分配一个连接root user),并使用以下命令来增加max_connections变量:

SET GLOBAL max_connections = 500;
Run Code Online (Sandbox Code Playgroud)

该更改将一直存在,直到下一个服务器重新启动。为了使此更改永久生效,您必须在配置文件中进行修改。你可以这样做

vi /etc/my.cnf

[mysqld]
max_connections = 500
Run Code Online (Sandbox Code Playgroud)

本文详细介绍了逐步解决此错误的方法。看看它,希望对您有所帮助。谢谢。


Rya*_*ton 7

要查看配置了多少个连接供您的数据库使用:

select @@max_connections;
Run Code Online (Sandbox Code Playgroud)

要更改它:

set global max_connections = 200;
Run Code Online (Sandbox Code Playgroud)

查看当前有多少个已连接:

show processlist;
Run Code Online (Sandbox Code Playgroud)

我还编写了这个软件来帮助我创建一个很好的一段时间内的交易电子表格,这样我就可以追踪哪些查询出现了问题: 在此输入图像描述