【发布时间】:2010-12-25 10:36:14
【问题描述】:
今天我的一个网站开始显示
错误号: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,无)
- 检查数据库用户权限
- 在 PHP 中更改
mysql.connect_timeout和default_socket_timeout - 在 MySQL 中更改
max_allowed_packet - 阅读official docs、论坛和 SO 中所有“MySQL 服务器已消失”的内容
新功能:
- 在 PHP 中禁用持久连接
- 在 MySQL 中更改
wait_timeout和connect_timeout
更新:
这似乎与我的脚本的执行时间有关:它使用 Facebook PHP 客户端检索一些信息,并且这个调用今天似乎随机失败,所以我要么没有来自 Facebook 的数据,要么是 MySQL 错误。但令我惊讶的是,给定的解决方案似乎都没有处理超时。
有什么想法吗?感谢您的宝贵时间!
【问题讨论】:
-
Apache 和 MySQL 在同一个盒子上吗?如果您创建一个简单的 PHP 页面来运行一个简单的查询(例如 SELECT VERSION();),那会起作用吗?
-
@Eric J:是的,令我惊讶的是,第二个也是如此,这似乎是框架带来的问题..
-
您可以发布生成的查询输出吗?我假设这是通过 CodeIgniter 进行的。您是否有机会使用 InnoDB 或异国代码页?
-
@Pestilence 是的,我可以,但这只是一些行,没有太多麻烦。我在所有 dbs/tables 上使用 MyISAM 和 UTF-8。
标签: php mysql facebook codeigniter