MySQL server has gone away 问题分析

21 篇文章 0 订阅

最近网站时不时报错:MySQL server has gone away

问题分析,mysql在创建连接之后,之后处理逻辑时间过长导致mysql连接超时,假设一个请求发起,如下执行顺序:

mysql_connect-->ok(wait_timeout = 30s)-->(insert,select,update,delete)->ok->逻辑处理(逻辑处理时间:40s,其中,无任何的insert,select,update,delete)->(insert,select,update,delete)-->catch:MySQL server has gone away;

因逻辑执行过程,(比如一些统计信息,或者一些大数据的处理信息),不能完全保证在wait_timeout设定的时间范围内执行,那么,只能检测连接状态,若连接状态已经断开,那么,再次进行连接,处理流程如下:

mysql_connect-->ok(wait_timeout = 30s)-->(insert,select,update,delete)->ok->逻辑处理(逻辑处理时间:40s,其中,无任何的insert,select,update,delete)->检测连接状态,若连接超时,关闭上一个连接句柄(mysql_close()),重新开启连接(mysql_connect->ok)->(insert,select,update,delete)-->catch:MySQL server has gone away;


PHP代码大概如下:

$connect = mysql_connect( '127.0.0.1', 'root', '123456',131072);

mysql_select_db('dbname');

//@todo 程序逻辑
for ($i=0;$i<100000000;$i++){
    //@todo
}

//检查服务器是否关闭了连接
if (!mysql_ping($connect)) {
    //关闭上一个连接
    mysql_close($connect);
    
    //重新进行连接
    $connect = mysql_connect('127.0.0.1', 'root', '123456', 131072);
    
    //这句很重要
    mysql_select_db('dbname');
}  

$result = mysql_query("SELECT * from member",$connect); //查询

while($row = mysql_fetch_array($result))
{
    var_dump($row);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值