MySQL server has gone away提示问题及其解决_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2223 | 回复: 0   主题: MySQL server has gone away提示问题及其解决        下一篇 
tngou
注册用户
等级:中校
经验:2433
发帖:192
精华:15
注册:2014-4-28
状态:离线
发送短消息息给tngou 加好友    发送短消息息给tngou 发消息
发表于: IP:您无权察看 2015-7-8 8:55:09 | [全部帖] [楼主帖] 楼主   主页

    初看这个提示,你可能会发笑,这个mysql的提示真是人性化呢。很快你就会笑不出来了,因为,问题是需要用来解决的。

    看上去,应该是两次mysql操作之间的时间太长了,导致mysql连接自动关闭了。可是根据经验,对同一批数据,此前程序也这么写过,两次操作的时间也同样很长。更何况,同事也同时在操作这个库,间隔的时间比我的更长。

    看了mysql服务器端的wait_timeout和max_allowed_packet的值,绝对的长和大!如下:

以下是代码片段:

mysql> show variables like ‘wait_timeout’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| wait_timeout  | 28800 |
+—————+——-+
1 row in set (0.00 sec)mysql> show variables like ‘max_allowed_packet’;
+——————–+———+
| Variable_name      | Value   |
+——————–+———+
| max_allowed_packet | 1048576 |
+——————–+———+
1 row in set (0.00 sec)


   看着这些数据,感觉可以判断出服务器端应该是没有问题的,但是总得用实验说话,编写如下程序:

以下是代码片段:

$link = mysql_connect(‘…’, ‘…’, ‘…’);
mysql_select_db(“…”, $link);echo “Start !\n”;
sleep(30);
echo “End !\n”;
mysql_close($link);
?>


    执行之后,到mysql服务器端show processlist;发现一超过20秒,就没有其连接了。然而再到另一台服务器上执行,却无此问题。top命令了一下,发现两台服务器的空闲内存的确 差异很大。而上面又说明了,同事和我在同一服务器上对这个库进行操作却无此问题,真令人诧异。

    而后又发现,我程序有个bug,有一数字变量本意是存储sql语句的记录,然而并没有考虑这个数组在执行时间好几个小时之后的大小会成为天文数字。莫非这个地方有问题?

    既然暂时可以排除服务器的问题,只好从我的程序入手了。

    mysql_ping()是个好东西,但用得也不是很爽。手册中“If it has gone down, an automatic reconnection is attempted. ”。但是,发现它并没有automatic reconnection。

    于是只好,先判断mysql_ping()的返回值,如果false,则mysql_close()本次连接,然后mysql_connect()。

    如果是在类里面实现的话,建议加上mysql_connect()第四的参数为true。这样在实例化的时候避免资源符号只有一个。

    参考资料:

以下是引用片段:

MySQL: 诡异的MySQL server has gone away及其解决

http://www.jimmydong.com/blog/post/1/123MySQL server has gone away
http://hi.baidu.com/thinkinginlamp/blog/item/8512ad4b6f2e96f482025cf7.html


B.1.2.9. http://jump.tngou.net?url=aHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjAvZW4vZ29uZS1hd2F5Lmh0bWwsql.com/doc/refman/5.0/en/gone-away.html">http://dev.mysql.chttp://jump.tngou.net?url=aHR0cDovL3l5dGNwdC5ibHVlaWRlYS5jb20vYXJjaGl2ZXMvMjAwNy80MjgwLnNodG1s server has gone away 解决办法

http://yytcpt.blueidea.com/archives/2007/4280.shtml
mysql_ping
http://cn2.php.net/mysql_ping




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论