一尘不染

PHP站点中突然出现“ MySQL服务器已消失”错误

mysql

今天我的一个网站开始展示

错误编号:2006
MySQL服务器不见了

这是一个低流量的客户端站点,在Apache 2.2.9(Debian),PHP 5.2.6-1 + lenny3(使用CodeIgniter
1.7.1框架)和MySQL
5.0.51a下运行。我显然是对该错误进行了重新研究,但所有可能的解决方案都表明正在进行的大查询可能会超时并重置连接,或达到数据包限制。但是,事实并非如此,这是一个使用最简单查询处理的小型数据库。为了确保这一点,我编写了一些查询以返回一行,但仍然是相同的错误。

数据库凭据很好,我什至可以直接登录mysql,运行站点的一些查询并立即获取正确的数据。同一台服务器上还有其他几个站点,并且与数据库的连接更大,这些站点都没有问题。

我试过了:

  • 重新启动MySQL
  • 重新启动整个服务器
  • 寻找日志中的错误(Apache和MySQL,无)
  • 检查数据库用户权限
  • 更改mysql.connect_timeoutdefault_socket_timeout在PHP
  • max_allowed_packet在MySQL中更改
  • 阅读官方文档,论坛以及SO中所有显示“ MySQL服务器已消失”的内容

新:

  • 在PHP中禁用持久连接
  • 更改wait_timeoutconnect_timeout在MySQL

更新:

它似乎与脚本的执行时间有关:它使用Facebook
PHP客户端检索一些信息,并且此调用今天似乎随机失败,因此我没有Facebook的数据或MySQL错误。但是令我惊讶的是,给定的解决方案似乎都没有解决超时问题。

有任何想法吗?感谢您的时间!


阅读 274

收藏
2020-05-17

共1个答案

一尘不染

正如我在更新中所说的那样,我得出的结论是,与Facebook的链接花费的时间超过与数据库的最大连接时间时,MySQL就会出现问题。没有任何建议可以克服此限制,因此我决定解决此问题,并在每次我认为链接可能消失时重新连接。

因此,在每次调用Facebook之后,我都会使用以下代码:

$ this-> load-> database();
$ this-> db-> reconnect();

这是使用CodeIgniter和AFAIK时的特殊解决方案,仅从1.7.2版开始,db->
reconnect()函数才可用,因此我对其进行了更新以使其正常工作。

谢谢大家的回答!

2020-05-17