Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“突然”;MySQL服务器已经消失了”;PHP站点中的错误_Php_Mysql_Facebook_Codeigniter - Fatal编程技术网

“突然”;MySQL服务器已经消失了”;PHP站点中的错误

“突然”;MySQL服务器已经消失了”;PHP站点中的错误,php,mysql,facebook,codeigniter,Php,Mysql,Facebook,Codeigniter,今天我的一个网站开始显示 Error Number: 2006 MySQL server has gone away 错误号码:2006 MySQL服务器已经消失了 它是在Apache2.2.9(Debian)、PHP5.2.6-1+lenny3(使用CodeIgniter 1.7.1框架)和MySQL 5.0.51a下运行的低流量客户端站点。很明显,我研究了这个错误,但所有可能的解决方案都暗示,有一些大的查询正在进行,可能会超时并重置连接,或者达到数据包限制。然而,事实并非如此,它是一个用最简

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

Error Number: 2006 MySQL server has gone away 错误号码:2006 MySQL服务器已经消失了 它是在Apache2.2.9(Debian)、PHP5.2.6-1+lenny3(使用CodeIgniter 1.7.1框架)和MySQL 5.0.51a下运行的低流量客户端站点。很明显,我研究了这个错误,但所有可能的解决方案都暗示,有一些大的查询正在进行,可能会超时并重置连接,或者达到数据包限制。然而,事实并非如此,它是一个用最简单的查询处理的小型数据库。为了确定这一点,我编写了一些查询以返回一行,仍然是相同的错误

数据库凭证很好,我甚至可以直接登录mysql,运行一些站点查询,并立即获得正确的数据。在同一台服务器上还有其他几个站点,它们都连接到数据库,而且这些站点要大得多,它们都没有问题

我试过:

  • 重新启动MySQL
  • 重新启动整个服务器
  • 在日志中查找错误(Apache和MySQL,无)
  • 检查数据库用户权限
  • 在PHP中更改mysql.connect\u timeout和
    默认\u socket\u timeout
  • 更改MySQL中允许的最大数据包
  • 阅读论坛上的所有内容,说“MySQL服务器已经消失了”
新建:


  • 在PHP中禁用持久连接
  • 在MySQL中更改
    wait\u timeout
    connect\u timeout
更新:

这似乎与我的脚本的执行时间有关:它使用Facebook PHP客户端检索一些信息,而这个调用今天似乎随机失败,因此我要么没有来自Facebook的数据,要么是MySQL错误。但令我惊讶的是,所有给出的解决方案似乎都无法解决超时问题


有什么想法吗?谢谢你抽出时间

由于其他站点可以工作,我们可以假设它与您的站点(而不是服务器)相关。官方文档提到,如果在服务器连接关闭后尝试执行查询,则可能会发生这种情况。CodeIgniter中是否有任何钩子在请求结束时执行某些操作,数据库连接可能会关闭?

可能是连接超时影响了PHP中的持久连接。我过去经常看到他们。timeout参数在MySQL本身中

你的选择包括: -不使用持久连接 -关闭MySQL服务器上的空闲超时 -捕捉错误

我总是将重新连接包装到我自己的PDO类中,所以我甚至不记得PHP是否重新连接。无论如何,这是一个容易解决的问题。查询时,捕获并重新连接


我曾经用InnoDB“生成”过这个错误。如果您正在使用该引擎,出现故障后,
显示引擎INNODB状态的输出是什么?

您提到这是一项夜间任务,您正在获取FaceBook数据等。该过程是否运行了很长时间

我最近有一个脚本,它将数据从一个集群移动到另一个集群,并转换格式等。这个脚本全天候运行,将数据移动到各个集群。我发现,无论是否有持久连接,MySQL库都会在几分钟后(有时5分钟,有时更长)退出

对于我的案例,我找到的唯一绕过它的方法是在我的包装中放入一个时间检查,并在执行查询之前检查距离上次重新连接有多长时间了。我将其设置为检查是否超过2分钟,如果是,则重新建立连接,确保将mysql_connect上的“new_link”标志(第4个参数)设置为false


自从更改此项之后,我再也没有出现过相同的错误。

正如我在更新中所说,我得出结论,当链接到Facebook的时间超过与DB的最大连接时间时,MySQL就会出现问题。所有的建议都无法克服这个限制,所以我决定绕过它,每次我假设链接可能消失时都重新连接

所以每次打电话到Facebook后,我都会使用以下代码:

$this->load->database(); $this->db->reconnect(); $this->load->database(); $this->db->reconnect(); 这是使用CodeIgniter时的特殊解决方案,而且db->reconnect()函数仅在1.7.2版之后才可用,因此我更新了它以便工作


谢谢大家的回答

Apache和MySQL在同一个盒子上吗?如果你创建了一个简单的PHP页面来运行一个简单的查询(例如,SELECT VERSION();),这行吗?@Eric J:是的,对我来说,第二个也是,这似乎是框架带来的一个问题。你有没有可能发布生成的查询输出?我想这是通过CodeIgniter实现的。你是在使用InnoDB还是异国情调的代码页?@Pestilence是的,我可以,但这只是一些没有太多麻烦的行。我在所有数据库/表上都使用MyISAM和UTF-8。不,我在CodeIgniter中没有任何挂钩,或者禁用持久连接没有任何区别,但是关闭空闲超时(将MySQL的等待超时和连接超时归零,对吗?)。然而,我担心这可能会产生负面影响,比如永无止境的MySQL进程,对吗?还有,你所说的“捕捉错误”是什么意思?我没有对代码做任何修改,数据库数据也没有更改,这是一个一夜之间的问题,这是一件奇怪的事情。非常感谢。好吧,问题仍然存在,但我找到了一个模式。我将更新这个问题。将mysql的超时时间归零可能会对故障网络产生负面影响。嗯,捕获错误需要在框架的DB处理程序中进行一些定制。。。或一个巨大的catch(),连接并重试。奇怪的是,禁用持久性连接并没有奏效。实际上。。。你在这个MySQL盒子上使用复制吗?不,我曾经这样做只是为了迁移服务器。我已经更新了问题,