我们在PHP中使用mysql_connect方法为守护进程创建数据库句柄。问题是,该连接可能不会超过8小时(有时超过几周)。
我们遇到了MySQL将终止会话的问题,因为已达到wait_timeout。 http://dev.mysql.com/doc/refman/5.0/en/gone-away.html
我们不希望为所有连接增加此值。有没有办法只通过PHP增加该句柄的超时?通过MySQL?
答案 0 :(得分:1)
长时间挂起数据库连接并不好,因为数据库在任何时候都只提供固定数量的连接;如果你长时间使用一个,这意味着你的数据库处理其他请求的能力较小,即使你实际上没有用这个连接做任何事情。
如果程序暂时使用它,我建议删除连接,并在需要更多数据库工作时重新连接。
此外,此解决方案将保护您的程序免受可能的数据库停机,即如果您需要重新启动数据库服务器(即使在最佳支持的网络中也会发生)。如果保持连接处于活动状态(即根据其他答案进行数据库ping),那么这样的事件将使您遇到与现在完全相同的问题。通过在不需要时删除的正确管理连接,即使您计划了数据库的停机时间,也可以安全地保持守护程序运行;只要它在一段时间内保持闲置状态,它就不需要任何明智的了。
(顺便说一句,我也质疑编写一个持续运行的PHP程序的智慧; PHP是为短期Web请求而设计的。它可能能够运行长期守护程序,但有更好的工具可用于工作)
答案 1 :(得分:0)
对于这个问题,最好的方法是使用mysql_ping();
在手动PHP mysql_ping()
上查看