[警告]:PDO :: __ construct():MySQL服务器已经消失 – wait_timeout不是原因?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[警告]:PDO :: __ construct():MySQL服务器已经消失 – wait_timeout不是原因?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1845字,纯文字阅读大概需要3分钟。
内容图文
我希望这里有人可以帮助解决我在网络服务器上遇到的问题.目前,服务器托管我们为帮助台购买的Web应用程序.每当有人导航到该页面时,每隔8小时就会出现以下错误:
[Warning]: PDO::__construct(): MySQL server has gone away (Database/class.SWIFT_Database.php:334)
我已经尝试将wait_timeout设置为/etc/my.cnf文件中的最大值,即;
wait_timeout=31536000
同样从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)
我看到这对很多人来说都是一个问题,在mysql上运行各种各样的webapps,但似乎没有人有修复.网上有很多建议指向wait_timeout,但它似乎没有改变我所看到的错误.我已经尝试了关于这个问题的mysql手册的修复,但仍然没有运气(链接:http://dev.mysql.com/doc/refman/5.0/en/gone-away.html)
任何建议将不胜感激.服务器详情和产品版本如下:
服务器:OpenSuse 11.4
MySql版本:5.1.53
提前谢谢了!
解决方法:
虽然不是很优雅,但以下片段帮助我摆脱了超时并保持持久的联系.如果连接连续失败$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;
}
}
内容总结
以上是互联网集市为您收集整理的[警告]:PDO :: __ construct():MySQL服务器已经消失 – wait_timeout不是原因?全部内容,希望文章能够帮你解决[警告]:PDO :: __ construct():MySQL服务器已经消失 – wait_timeout不是原因?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。