获得;MySQL服务器已经消失了”;在PHP中,即使我';我正在关闭数据库连接

获得;MySQL服务器已经消失了”;在PHP中,即使我';我正在关闭数据库连接,php,mysql,mysqli,timeout,database-connection,Php,Mysql,Mysqli,Timeout,Database Connection,我有一个PHP套接字服务器,可以通过Telnet连接。一旦连接,我就能够以某种格式发送消息,并将它们保存在数据库中 当PHP套接字接收到消息时,它会打开一个数据库连接,执行查询,然后关闭连接。当它收到另一条消息时,它会再次打开连接,执行查询,然后关闭连接 到目前为止,当我以5-10分钟的间隔发送消息时,这种方法是有效的。然而,当间隔增加超过一个小时左右时,我得到一个MySQL服务器已经消失了错误 在做了一些研究之后,常见的解决方案似乎是增加等待时间,这对我来说不是一个选择。PHP套接字服务器应该

我有一个PHP套接字服务器,可以通过Telnet连接。一旦连接,我就能够以某种格式发送消息,并将它们保存在数据库中

当PHP套接字接收到消息时,它会打开一个数据库连接,执行查询,然后关闭连接。当它收到另一条消息时,它会再次打开连接,执行查询,然后关闭连接

到目前为止,当我以5-10分钟的间隔发送消息时,这种方法是有效的。然而,当间隔增加超过一个小时左右时,我得到一个
MySQL服务器已经消失了
错误

在做了一些研究之后,常见的解决方案似乎是增加等待时间,这对我来说不是一个选择。PHP套接字服务器应该是全天候开放的,我怀疑是否有办法将等待时间增加到无穷大

另一个选项是检查PHP本身是否已关闭MySQL服务器,并根据结果重置MySQL服务器,然后再次尝试建立连接


有人知道如何在PHP中实现这一点吗?或者,如果有人有其他方法在PHP Socket服务器中保持MySQL服务器的持续运行,我也会接受这个想法。

这个错误意味着已经建立了与DBMS的连接,但随后就丢失了。我曾经运行过与同一数据库实例有数百个并发连接的站点,每分钟处理数千个查询,只有在管理员故意终止查询时才看到此错误。您应该检查配置以了解交互超时,并读取服务器日志

根据您对错误的描述(您确实需要收集更多数据并描述错误的情况),脑海中浮现的唯一解释是某个地方存在死锁


我想知道在每条消息之后关闭连接是否有任何好处(取决于系统的使用情况)。艺术凤凰的评论有些混乱。但是,如果存在容量问题,那么我建议对现有的打开/关闭模型使用持久连接,但我怀疑这与您在这里描述的问题有关。

如果数据库连接超时(可能是由于自上次使用连接以来的长时间运行的进程),您将遇到此错误

只需一个命令,即可轻松检查连接并在必要时恢复连接:


您是否尝试过不关闭连接。即使不关闭它,也必须确保它不超出范围,否则PHP可能会回收它。这就是我以前所做的,我会在脚本开始时打开连接,然后运行查询。大约一个小时后,我会尝试通过telnet发送消息,但数据库写入失败,因为MySQL服务器已离开。延长交互超时或注入保持活动操作有问题吗?您在查询什么,更重要的是,数据多久更改一次?我们使用Sphinx searchd,它比Mysql快10到20倍。如果PHP不关闭连接,这意味着您很可能正在使用持久连接。请确保在关闭连接时连接确实已关闭。如何检查交互超时?如果我理解你的答案,如果我打开一个数据库连接,它应该保持打开,除非管理员杀死它?现在它只是在服务器上运行。我是否应该用sudo命令来运行它,以防止Ubuntu操作系统清理它(如果是这样的话)。对不起,我检查了正在运行的crontab,它似乎正在运行旧的脚本。我们目前正在检查套接字服务器在长时间未收到任何数据后是否仍将保存数据。到目前为止,我们的测试间隔为30分钟、2小时和5.5小时。您是否注意到连接已显式关闭?