2016-06-13 59 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變量盲目。 –