如何修复:mysql_connect():连接太多

时间:2009-04-08 17:19:33

标签: mysql

我收到以下错误:

mysql_connect(): Too many connections

它完全关闭了我的网站,该网站已经无缝运行了好几年。

注意:我与GoDaddy共享托管。

我该如何解决这个问题?

另外:有没有办法在共享主机方案上关闭所有连接并重启?

5 个答案:

答案 0 :(得分:15)

这是技术响应

当mysql服务器达到其最大并发客户端连接的软件可配置假设限制时,连接到mysql时会出现“太多连接”错误。

因此,解决此问题的正确方法是:

  1. 直接连接到mySQL服务器(通过localhost),并执行查询:SET GLOBAL max_connections = 1024;以在运行时更改连接限制(无停机时间)。
  2. 使您的更改成为永久更改,并编辑/etc/mysql/my.cnf(或类似内容)并在max_connections = 1024;部分中添加行[mysqld]行;如果您无法进行实时更改,请重新启动。
  3. 1024的选择限制是纯主观的;使用你想要的任何限制。您还可以通过查询SHOW VARIABLES LIKE "max_connections";检查当前限制。请记住,这些限制是有用的,以防止后端数据库不必要的过载。所以总是选择明智的限制。

    但是,对于这些步骤,您需要直接访问数据库mySQL服务器。

    正如你所说,你正在使用Godaddy(我不太了解它们),你可以选择联系你的服务提供商(即Godaddy)。但是,无论如何,他们 会在他们的日志中看到这一点。

    可能的根本原因

    这当然意味着太多客户端正在尝试同时连接到mySQL服务器 - 从每个配置指定的人工软件限制。

答案 1 :(得分:10)

最有可能的是,你一直是DDoS攻击的主题。

on this forum对完全相同的提供者抱怨完全相同。

答案是:

  VB告诉我这是DOS攻击 - 这是他们的消息:

     
    

这不是'漏洞利用'。这是DoS攻击(拒绝服务)。不幸的是,我们无能为力。 DoS攻击只能在服务器或路由器级别进行,这是您的主机的责任。他们决定采用简单的方法暂停您的帐户,而不是这样做。

  
     

如果你不能让他们认真对待,那么你应该寻找另一位主持人。抱歉,这是个坏消息。

可能的解决方法是:如果您的连接失败并显示mysql_connect(): Too many connections,则不会退出,而是sleep()半秒并尝试再次连接,并仅在{{{尝试失败。

这不是解决方案,而是一种解决方法。

这当然会延迟你的页面加载,但它比丑陋的10消息更好。

你也可以使用某种方法来告诉机器人和浏览器。

然后,设置一个加盐的too many connections Cookie,重定向到同一页面,然后检查该Cookie并仅在用户代理通过测试时连接到SHA1

答案 2 :(得分:3)

完成连接后,您是否关闭了连接?您使用某种类型的连接池吗?听起来你正在打开连接,而不是关闭它们。

编辑:Quassnoi已经回答了。如果它是DDoS,并且您正在使用共享主机,您可能只需联系您的主机并与他们一起解决。不幸的是,当您无法控制整个系统时,这是一种风险。

答案 3 :(得分:1)

考虑使用mysql_pconnect()。您的主机可能已为连接添加某种限制。比如每20分钟最多100个或者奇怪的东西。

答案 4 :(得分:0)

另一件可能导致此错误的事情是数据库空间不足。我最近发生了这种情况,问题不是连接,而是磁盘空间。希望这有助于其他人!