2016-06-13 67 views
-1

当保存对象时,我得到这个错误“一般错误:2006 MySQL服务器已经消失”。2006 MySQL服务器已经消失,同时保存对象

我不是要粘贴代码,因为它太复杂,我可以用这个例子来解释,但首先一些背景:

进出口使用尔康任务通过命令行执行功能,这个任务将创建一个来自Model类的对象和那个对象调用一个casperjs脚本,它在网页中执行一些动作,当它完成时它会保存一些数据,这里是有时我得到的mysql服务器已经消失,只有当casperjs花费更长时间。 Task.php

function doSomeAction(){ 
     $object = Class::findFirstByName("test"); 
     $object->performActionOnWebPage(); 
} 

在Class.php

function performActionOnWebPage(){ 
    $result = exec ("timeout 30s casperjs somescript.js"); 
    if($result){ 
     $anotherObject = new AnotherClass(); 
     $anotherObject->value = $result->value; 
     $anotherObject->save(); 
    } 
} 

这似乎是$ anotherObject->保存();方法受时间exec(“timeout 30s casperjs somescript.js”);需要得到一个答案,当它不应该。 它不是数据保存的问题,因为它失败并保存与相同的输入成功,我看到的唯一区别是时间casperjs需要返回一个值。 看来,如果由于某种原因,phalcon在“Class.php”函数的整个执行期间打开MySQL连接,在casperjs花费太长时间时引发超时,这是否有意义?你能帮我解决它或找到一个解决办法吗?

回答

1

问题似乎是要么尝试在单个数据包中获取超出您的mysql配置文件允许的大量数据,要么您的代码要求没有正确设置wait_timeout变量值。

检查wait_timeoutmax_allowed_packet值,可以在下面命令 -

SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; 
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'; 

检查通过,并增加你的my.cnf (linux) or my.ini (windows)配置文件,然后重新启动mysql服务这些值按您的要求。

+0

是的,那是我第一次猜测,但是当casperjs速度很快时,它保存所有内容都没有问题,是相同的数据。数据也非常简单。 – subharb

+0

问题似乎是wait_timeout,因为之前的casperjs将比此变量花费更多时间,现在您已经优化了casperjs代码,因此它正在快速执行并且您没有收到问题....绝对首先,我们必须优化代码而不是更改DB变量盲目。 –

相关问题