[警告]:PDO :: __ construct():MySQL服务器已经消失 - wait_timeout不是原因?

Ala*_*lan 3 mysql pdo

我希望这里有人可以帮助解决我在网络服务器上遇到的问题.目前,服务器托管我们为帮助台购买的Web应用程序.每当有人导航到该页面时,每隔8小时就会出现以下错误:

[Warning]: PDO::__construct(): MySQL server has gone away (Database/class.SWIFT_Database.php:334)
Run Code Online (Sandbox Code Playgroud)

我已经尝试将wait_timeout设置为/etc/my.cnf文件中的最大值,即;

wait_timeout=31536000
Run Code Online (Sandbox Code Playgroud)

同样从mysql我将全局wait_timeout设置为此值并将session wait_time设置为相同.

我注意到一些奇怪的行为,当你重新启动mysql服务时,等待超时重置为28800默认值,尽管它在my.cnf中设置.我找不到mysql的任何其他配置文件,但很高兴看到有人能指出我的方向.

今天早上当我登录服务器并运行以下命令时,会话wait_timeout值已恢复!

mysql> select @@global.wait_timeout, @@session.wait_timeout;
+-----------------------+------------------------+
| @@global.wait_timeout | @@session.wait_timeout |
+-----------------------+------------------------+
|              31536000 |                  28800 |
+-----------------------+------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我看到这对很多人来说都是一个问题,在mysql上运行各种各样的webapps,但似乎没有人有修复.网上有很多建议指向wait_timeout,但它似乎没有改变我所看到的错误.我已经尝试了关于这个问题的mysql手册的修复,但仍然没有运气(链接:http://dev.mysql.com/doc/refman/5.0/en/gone-away.html)

任何建议将不胜感激.服务器详情和产品版本如下:

服务器:OpenSuse 11.4 MySql版本:5.1.53

提前谢谢了!

kot*_*zot 6

虽然不是很优雅,但以下片段帮助我摆脱了超时并保持持久的联系.如果连接连续失败$ limit次数,它将抛出异常,但如果问题是超时,则最多只需要重试1次.

$db = null;
$limit = 10;
$counter = 0;
while (true) {
    try {
        $db = new PDO('mysql:host=' . db_host . ';dbname=' . db_name, db_user, db_pass);
        $db->exec( "SET CHARACTER SET utf8" );
        $db->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); 
        $db->setAttribute( PDO::ATTR_PERSISTENT, true );
        break;
    }
    catch (Exception $e) {
        $db = null;
        $counter++;
        if ($counter == $limit)
            throw $e;
    }
}
Run Code Online (Sandbox Code Playgroud)