2012年10月29日星期一

MySQL server has gone away

PHP 5.3.8,PDO 扩展在 PHP 源代码安装时启用。MySQL 5.1.4, Linux 2.6.27。

脚本伪代码:
[php]
$flags = array(
PDO::ATTR_PERSISTENT => true,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$db = init_db($flags);

while(true) {
// retrieve data from db
}
[/php]

脚本运行时间超过 MySQL 服务器中设置的 wait_timeout 时间后,收到错误:
[sql gutter="false"]
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
[/sql]

修改脚本,初始化 DB 连接时,设置 PDO::ATTR_PERSISTENT = false,问题不再出现。


在 PHP 的 bug 列表中找到类似的问题
Bug #37319 "MySQL server has gone away", with PDO::ATTR_PERSISTENT => true
,从下面评论来看,似乎对于 PDO::ATTR_PERSISTENT = true 出现的问题还是没解决。

没有评论 :

发表评论