今天我的一个网站开始展示
Error Number: 2006 MySQL server has gone away
它是在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_timeout
和default_socket_timeout
PHP
改变max_allowed_packet
MySQL
阅读官方文档,论坛和SO中的所有内容,"MySQL服务器已经消失"
新:
在PHP中禁用持久连接
改变wait_timeout
和connect_timeout
在MySQL中
更新:
它似乎与我的脚本的执行时间有关:它使用Facebook PHP客户端检索一些信息,这个调用似乎今天随机失败,所以我要么没有来自Facebook的数据或MySQL错误.但令我惊讶的是,没有一个给定的解决方案似乎处理超时.
有任何想法吗?感谢您的时间!
正如我在更新中所说,我得出的结论是,当Facebook的链接花费的时间长于数据库的最大连接时间时,会出现MySQL的问题.没有任何建议可以超越这个限制,所以我决定解决它并重新连接每次我假设链接可能已经消失.
所以在每次打电话给Facebook之后,我都习惯了以下代码:
$this->load->database(); $this->db->reconnect();
这是使用CodeIgniter时的特殊解决方案,而AFAIK db-> reconnect()函数仅在1.7.2版本之后可用,因此我更新了它以便工作.
谢谢大家的回答!