gearman中worker常驻后台,导致MySQL server has gone away的解决方法
本文实例讲述了gearman中worker常驻后台,导致MySQLserverhasgoneaway的解决方法。分享给大家供大家参考,具体如下:
产生这个原因主要有如下几点:
1、mysql服务宕机了 2、长时间没有操作,超过了wait_timeout的设置,mysql自动断开 3、mysql请求链接被主动kill 4、发送的请求或返回结果过大,可设置max_allowed_packet的值 5、程序中你都是通过单例来操作数据库,如果两个操作时间超过wait_timeout。
为了演示的方便,设置wait_timeout时间为10秒
>setglobalwait_timeout=10; >showglobalvariableslike'wait_timeout';
worker.php代码如下:
addServer('127.0.0.1',4730); //注册一个回调函数,用于业务处理 $worker->addFunction('longTime',function($job){ //workload()获取客户端发送来的序列化数据 $data=json_decode($job->workload(),true); $db=newmysqli('192.168.1.100','root','','test'); if($db->connect_error){ die('connecterror'); } //等待15秒,我们设置mysql的wait_timeout为10秒 sleep(15); //当执行到这里时,因为超时,所以mysql自动把连接断开了 $ret=$db->query("INSERTINTOtestVALUES(NULL,{$data['title']},{$data['content']});"); if($ret){ return"插入成功\n"; } }); //死循环 //等待job提交的任务 while($worker->work());
client.php代码如下:
addServer('127.0.0.1',4730); //doNormal同步 $ret=$client->doNormal('longTime',json_encode(array( 'title'=>'我是标题', 'content'=>'我是内容', ))); echo$ret;
执行的结果如下图所示,出现了MySQLserverhasgoneaway的情况。
一般的解决方法:
1、调大wait_timeout的值(不建议)
2、每次在操作数据库的时候,ping()一下,如果断开就重新连。
3、在wait_timeout时间间隔之内,我们时不时的去query('select1+1');一下,让mysql知道连接还活着。
修改worker.php代码如下:
addServer('127.0.0.1',4730); //注册一个回调函数,用于业务处理 $worker->addFunction('longTime',function($job){ //workload()获取客户端发送来的序列化数据 $data=json_decode($job->workload(),true); $db=newmysqli('192.168.1.100','root','','test'); if($db->connect_error){ die('connecterror'); } //等待15秒,我们设置mysql的wait_timeout为10秒 sleep(15); //ini_set('mysqli.reconnect',1); //php手册上说,ping会尝试重新连接,但现实是并不会 //$db->ping(); if(!$db->ping()){ $db->close(); //重新连接数据库 $db=newmysqli('192.168.1.100','root','','test'); } $ret=$db->query("INSERTINTOtestVALUES(NULL,'{$data['title']}','{$data['content']}');"); if($ret){ return"插入成功\n"; } }); //死循环 //等待job提交的任务 while($worker->work());
运行结果如下:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。