mySQL错误1040:连接太多

mySQL错误1040:连接太多,mysql,connection,Mysql,Connection,如何修复这些“SQL错误1040:连接太多” 甚至我也试着 max_user_connection=500 仍然是“连接太多”如果像这样的连接正在耗尽,那么很有可能您没有关闭已打开的连接 检查打开连接的代码,并确保尽快关闭连接。通常,您希望在实现IDisposable(包括数据库连接)的任何对象周围使用using关键字,以确保这些对象一离开所需的作用域就被释放 您可以使用此查询检查当前活动连接数: show processlist 参考:您必须更改最大连接数,以增加允许的总连接数 并将max

如何修复这些“SQL错误1040:连接太多” 甚至我也试着

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连接耗尽

  • 慢查询

  • 数据存储技术

  • 错误的MySQL配置

  • 我通过以下几点克服了这个问题

    打开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,太多了