65

如何解决这些问题,“SQL 错误 1040:连接太多”,即使我尝试输入

max_user_connection=500

仍然“连接太多”

4

13 回答 13

66

MySQL:错误 1040:连接太多

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

以下这些原因导致 MySQL 耗尽连接。

  1. 慢查询

  2. 数据存储技术

  3. 错误的 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 量。

于 2017-02-13T05:06:18.360 回答
38

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

编辑 2019 年 1 月:
这适用于 MySQL 5.7 和 5.8 。我不知道上面的版本。

于 2015-12-09T10:10:31.190 回答
30

如果您用完了这样的连接,则很有可能您没有关闭已打开的连接。

查看打开连接的代码并确保尽快关闭连接。通常,您希望在实现IDisposable的任何对象(包括数据库连接)周围使用 using关键字,以确保这些对象在离开需要它们的范围后立即被释放。

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

show processlist

参考:MySQL 显示状态 - 活动或总连接数?

于 2013-01-15T04:10:23.353 回答
17

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

为了修复这个错误,请以root用户身份登录 MySQL(注意:您可以以 root 身份登录,因为 mysql 将为 预分配一个额外的连接root user)并使用以下命令增加max_connections变量:

SET GLOBAL max_connections = 500;

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

vi /etc/my.cnf

[mysqld]
max_connections = 500

本文详细介绍了解决此错误的分步解决方法。看看它,我希望它可以帮助你。谢谢。

于 2017-07-24T18:39:57.740 回答
10

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

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

MySQL 连接太多

于 2013-01-15T05:01:38.140 回答
8

在您的程序中,您将打开连接并保持打开状态而不关闭它。

我遇到了同样的问题,终于确定了。

我在尝试捕获后添加了此代码。

finally{
    try {
        rs.close();
        p.close();
        conn.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
于 2015-04-08T09:47:41.727 回答
5

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

select @@max_connections;

要更改它:

set global max_connections = 200;

要查看当前连接的数量:

show processlist;

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

于 2020-01-24T23:27:05.703 回答
2

尝试这个 :

打开终端并输入以下命令:sudo gedit /etc/mysql/my.cnf

将该行粘贴到 my.cnf 文件中:set-variable=max_connections=500

于 2014-12-05T12:21:47.167 回答
1

此问题主要发生在超过 MySQL 允许的最大并发连接数时。允许的最大连接数存储在全局变量 max_connections 中。您可以show global variables like max_connections;在 MySQL中检查它

您可以通过以下步骤修复它:

步骤1:

登录 MySQL 并运行以下命令:SET GLOBAL max_connections = 100;

现在登录到 MySQL,连接太多错误已修复。此方法不需要重新启动服务器。

第2步:

使用上面的 step1 你可以解决这个问题,但是当 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 服务器中的打开表限制以适应额外的请求。最后。关闭服务器上已完成事务的连接非常重要。

于 2020-12-30T15:19:28.937 回答
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
}

这样你的连接就可以关闭并在你去做其他事情之前被释放回线程池

于 2020-05-24T20:18:34.663 回答
0

通过重新启动数据库 Windows 服务解决了问题

于 2021-04-06T13:56:41.717 回答
0

该问题在https://dev.mysql.com/doc/refman/8.0/en/too-many-connections.html中明确指出:

如果客户端在尝试连接 MySQL 服务器时遇到 Too many connections 错误,则所有可用连接都被其他客户端使用。

几分钟后我解决了这个问题,似乎连接已被其他客户端释放,我也尝试同时重新启动 vs 和工作台。

于 2020-04-22T14:52:42.713 回答
0

检查您当前正在运行的应用程序是否仍在访问您的 mysql 并已使用所有数据库连接。

因此,如果您尝试从 workbench 访问 mysql ,您将收到“连接过多”错误。

停止当前正在运行的 Web 应用程序,该应用程序持有所有这些数据库连接,然后您的问题将得到解决。

于 2017-03-16T17:54:39.610 回答