Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli连接太多(HY000/1040)和(08004/1040)有区别吗?_Php_Mysql_Mysqli - Fatal编程技术网

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

Php mysqli连接太多(HY000/1040)和(08004/1040)有区别吗?,php,mysql,mysqli,Php,Mysql,Mysqli,我的脚本中出现以下错误: mysqli_connect(): (08004/1040): Too many connections mysqli_connect(): (HY000/1040): Too many connections 区别是什么?如何解决此问题?“连接太多”表示您的脚本正在打开至少一个到数据库的连接。基本上,对于一台服务器,只需要一个连接。获取此错误可能是服务器配置错误(我假设不是这样,因为max connections=zero不是一个选项),也可能是脚本中的一些编程错

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

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

区别是什么?如何解决此问题?

“连接太多”
表示您的脚本正在打开至少一个到数据库的连接。基本上,对于一台服务器,只需要一个连接。获取此错误可能是服务器配置错误(我假设不是这样,因为max connections=zero不是一个选项),也可能是脚本中的一些编程错误


检查数据库连接是否重新打开(
mysqli\u connect
)。每个脚本应该只有一个(!),通常您应该注意重用打开的连接或在脚本执行后正确关闭它们(
mysqli\u close

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

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

我认为,对于人们来说,每页加载一个数据库连接,当然还有多个查询是很常见的。因此,实际上它归结为3点:

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

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


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

解决此问题的步骤:

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

    mysql -e "show variables like '%connection%';"
    
  • 您将看到如下所示:

    max_connections = 500
    
  • 根据需要增加:

    max_connections = 50000
    
  • 重新启动MySQL服务:

    $ service MySQL restart
    
  • 现在检查你的网站,我希望错误不会发生


    谢谢大家!

    至于两者之间的区别,我认为HY000是一个PDO例外,其中08004实际上来自MySQL。错误1040是“连接太多”的代码。您还应该检查磁盘是否已满,这可能会导致相同的错误:

    df -h
    
    将显示每个分区上的剩余空间,您可能需要检查根分区
    /
    (或者/var/如果您有额外的分区):


    “我如何解决这个问题”-找出为什么它们的繁殖速度比死亡速度快?您可能需要增加max_connections您可以在本主题中编辑标志config pcconnect的值。我读到mysqli自动关闭连接。在我的应用程序中,我在每次ajax调用时连接db,并使用json返回数据。JSON响应后连接是否关闭?@sqlchild否,只要不关闭连接,它将根据my.conf中的
    wait_timeout
    interactive_timeout
    设置保持打开状态。请参阅手册,但最佳做法是关闭未使用的连接并释放资源。“您的脚本正在打开至少一个连接”,实际上并非如此。该脚本可以只打开一个连接,并在连接仍处于打开状态时被多次调用。“只要您不关闭它,它将保持打开状态”,根据PHP文档:“打开的非持久性MySQL连接和结果集在PHP脚本完成执行后自动销毁。。。显式关闭打开的连接和释放结果集是可选的“@sqlchild是的,它是关闭的,因为这是PHP的工作方式。我读到mysqli自动关闭连接。在我的应用程序中,我在每次ajax调用时连接db,并使用json返回数据。JSON响应发送给用户后,连接是关闭的还是需要关闭的?我读过同样的内容,但我的经验不同意。为了确保这一点,我在脚本末尾专门调用了mysqli close函数。
    df -h /