【问题标题】:Why does MYSQL Server "go away" under PHP 5.4.11, but not under 5.3.17?为什么 MYSQL Server 在 PHP 5.4.11 下会“消失”,但在 5.3.17 下不会?
【发布时间】:2013-02-21 18:00:09
【问题描述】:

我已经迁移到 PHP 5.4.11,除了它会在长期维护脚本中出现“MySQL 服务器已消失”错误之外,它仍然可以工作。 PHP 5.3.17 没有这样做。

我需要添加/删除 php.ini 或 my.cnf 指令吗?我是否需要更新我的查询 PHP 类脚本(我们使用的是 mysqli 扩展)?

【问题讨论】:

  • 我在 5.3 中也有。这主要取决于您的连接到期时间:my.cnf
  • 没有在 5.3.X 中有它,但在 5.4.X 中有它。我有 PHP 5.3.X 上的服务器连接到 PHP 5.4.X 上的服务器正在连接的同一个 MySQL 服务器,所以我不想摆弄 my.cnf。
  • 我现在没有要检查的 php.ini,但也许你应该看看那里是否有任何与数据库相关的值,它必须是那个
  • 您是否使用mysql_pconnect() 连接数据库?
  • 你检查过 /etc/my.cnf 中的 max_connections 设置了吗?如果它是一个繁忙的网站,您需要增加该值。例如,在 [mysqld] 部分下添加:max_connections = 500

标签: php mysql mysqli installation


【解决方案1】:

您应该检查C.5.2.9. MySQL server has gone away 下的MySQL Reference Manual。它列出了许多可能发生这种情况的原因。它在页面上提到:

MySQL 服务器已消失错误的最常见原因是 服务器超时并关闭连接。

由于您正在运行长时间的维护脚本,我怀疑这就是原因。页面的另一点:

默认情况下,服务器会在八小时后关闭连接,如果 什么都没发生。您可以通过设置更改时间限制 启动 mysqld 时的 wait_timeout 变量。见第 5.1.4 节, “服务器系统变量”。

您可以尝试将mysqli.reconnect 设置为1(在您的php.ini 中),或者将MYSQLI_OPT_CONNECT_TIMEOUToptions 增加。请参阅mysqli config。您还应该查看migrating from 5.3 to 5.4 注释。如果不查看您的代码,很难确定问题所在。

【讨论】:

    【解决方案2】:

    connect_timeout 不是问题,我必须修改我的查询类并添加以下内容:

    mysqli_options(MYSQLI_INIT_COMMAND,"SET SESSION wait_timeout=600;");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2020-10-23
      • 2012-08-31
      • 2012-08-12
      相关资源
      最近更新 更多