【问题标题】:PHP mysql_connect set wait_timeout [duplicate]PHP mysql_connect设置wait_timeout [重复]
【发布时间】:2013-01-01 02:55:15
【问题描述】:

可能重复:
MySQL server has gone away - in exactly 60 seconds

我们在 PHP 中使用 mysql_connect 方法为守护进程创建数据库句柄。问题是,该连接的使用时间可能不超过 8 小时(有时超过几周)。

我们遇到了 MySQL 将结束会话的问题,因为达到了 wait_timeout。 http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

我们不想为所有连接增加此值。有没有办法仅通过 PHP 增加该句柄的超时时间?通过 MySQL?

【问题讨论】:

  • 如果超时,为什么不能检查是否有连接并续订?
  • 只是一个评论:你不应该使用 PHP mysql_connect,因为它已被弃用,将来会被删除。
  • @FerCa 是正确的。所有mysql_xxx() 函数均已弃用。请尽快切换到mysqli或PDO。另请参阅stackoverflow.com/questions/12859942/… 了解更多信息。
  • @ManseUK 谢谢!您知道这会影响所有连接还是仅影响调用脚本中的连接?
  • @DanB。根据doc 配置选项将在脚本执行期间保留此新值,并在脚本结束时恢复 但您可以使用ini_get 检查同时执行的其他脚本确认

标签: php mysql


【解决方案1】:

对于这个问题,最好的办法是使用mysql_ping();

查看手动 PHP mysql_ping()

【讨论】:

  • mysql_ping 在 MySQL 5.5 中不起作用。
  • @DanB,你有那个来源吗?我找不到任何关于 ping 在 MySQL 5.5 中不起作用的信息,而且它似乎不太可能被删除。自 MySQL 5.0.3 起,自动连接默认关闭,但这与 ping 不工作不同。
  • @Animism - 看起来它在 5.5 中“只是”被弃用了。它仍然可以工作。
【解决方案2】:

长时间挂在DB连接上是不好的,因为DB在任何时候只提供固定数量的连接;如果您使用了很长时间,这意味着您的数据库处理其他请求的能力较低,即使您实际上并没有对该连接进行任何操作。

如果程序暂时使用完毕,我建议断开连接,并在需要做更多数据库工作时重新连接。

此外,此解决方案将保护您的程序免受可能的数据库停机的影响,即如果您需要重新启动数据库服务器(即使在最受支持的网络中也会发生这种情况)。如果您保持连接处于活动状态(即根据其他答案进行数据库 ping),那么这样的事件将使您遇到与现在完全相同的问题。通过在不需要时断开的适当管理的连接,即使您已计划在数据库上停机,您也可以安全地保持守护程序运行;只要它在这段时间内保持空闲状态,它就不会变得更聪明。

(顺便说一句,我还质疑编写一个持续运行的 PHP 程序是否明智;PHP 是为短期 Web 请求而设计的。它可能能够运行长期的守护程序,但有更好的工具可以用于工作)

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多