我收到以下错误:
mysql_connect(): Too many connections
它完全关闭了我的网站,该网站已经无缝运行了好几年。
注意:我与GoDaddy共享托管。
我该如何解决这个问题?
另外:有没有办法在共享主机方案上关闭所有连接并重启?
答案 0 :(得分:15)
当mysql服务器达到其最大并发客户端连接的软件可配置假设限制时,连接到mysql时会出现“太多连接”错误。
SET GLOBAL max_connections = 1024;
以在运行时更改连接限制(无停机时间)。max_connections = 1024;
部分中添加行[mysqld]
行;如果您无法进行实时更改,请重新启动。 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)
另一件可能导致此错误的事情是数据库空间不足。我最近发生了这种情况,问题不是连接,而是磁盘空间。希望这有助于其他人!