mysqli太多连接(HY000 / 1040)和(08004/1040)有区别吗?

时间:2014-01-18 10:05:06

标签: mysql mysqli

我的脚本中出现以下错误:

mysqli_connect(): (08004/1040): Too many connections 
mysqli_connect(): (HY000/1040): Too many connections

有什么区别,我该如何解决这个问题?

5 个答案:

答案 0 :(得分:8)

"Too many connections"表示您的脚本至少打开了一个与数据库的连接。基本上,对于一台服务器,只需要一个连接。获得此错误的原因是服务器配置错误(我认为不是这种情况,因为最大连接数=零不是一个选项)或脚本中存在一些编程错误。

检查数据库连接的重新开放(mysqli_connect)。每个脚本应该只有一个(!),通常你应该注意重用开​​放的连接,或者在脚本执行后正确关闭它们(mysqli_close

答案 1 :(得分:3)

虽然我无法告诉你上面两个错误编号之间的区别,但我可以告诉你是什么原因引起的。

您的MySQL数据库只允许同时有这么多连接。如果您通过PHP连接到MySQL,那么通常每次加载网站上的页面时都会打开一个新连接。因此,如果您的网站流量过多,可能会导致此问题。

我认为人们每页加载一个连接到他们的数据库是很常见的,而且肯定会有多个查询。所以真正归结为3分:

(现在让我告诉您,持久连接无法解决您的问题。)

如果您可以访问服务器的CLI / SSH,请尝试通过修改MySQL配置来增加限制(不要忘记重新启动服务以使更改生效)。这当然会消耗数据库服务器上的更多系统资源。

如果您有很多AJAX请求或其他内部数据库连接,您应该尝试通过一次调用将这些连接转换为单个脚本。您的站点可能会对提取MySQL数据的各种PHP文件进行多次AJAX调用,这些文件使用每个数据库连接。相反,创建一个PHP文件来收集给定页面上所需的所有数据,此脚本只需使用1个数据库连接即可获得所需的所有数据。

答案 2 :(得分:0)

解决该问题的步骤:

  1. 检查配置文件或my.cnf中的MySQL连接限制
  2. 运行以下命令进行检查:

    mysql -e "show variables like '%connection%';"
    
  3. 您将看到以下内容:

    max_connections = 500
    
  4. 根据需要增加它:

    max_connections = 50000
    
  5. 重新启动MySQL服务:

    $ service MySQL restart
    

现在检查您的网站,希望该错误不会发生!

谢谢!

答案 3 :(得分:0)

就两者之间的差异而言,我相信HY000是PDO例外,其中08004实际上来自MySQL。错误1040是“连接过多”的代码。

答案 4 :(得分:-1)

还应该检查磁盘是否已满,这可能导致相同的错误:

df -h

将显示每个分区上的剩余空间,您可能必须检查根分区/(或/ var /,以防有多余的分区):

df -h /