簡體   English   中英

php-reque:工作者失敗,並顯示“ MySQL服務器已消失”

[英]php-reque: worker fails with “MySQL server has gone away”

我開始使用php-resque( https://github.com/chrisboulton/php-resque )以及php和mysql服務器。 我看到工作人員出現“ MySQL服務器已消失”錯誤。

作業排隊代碼:

if ($request->command == 'custom_script') {       
  //error_log("before queue");
  Resque::enqueue($queue, 'AsyncTest', array('text'=>'yolo'));
  //error_log("after queue");
}

工作類別:

class AsyncTest{
public function setUp() {
   # Set up something before perform, like establishing a database connection
    $mysql = Mysql::getInstance();
    EH::setErrorHandler();
}

public function perform()
{
//      $mysql = Mysql::getInstance();
    // EH::setErrorHandler();
    //error_log($this->args['text']);
    $haiku_step_query= $mysql->query("SELECT id FROM haiku LIMIT 10 OFFSET 1");
    $row = $mysql->fetch_assoc($haiku_step_query);
    $haiku_id = $row['id'];
}
public function tearDown() {
   # Run after perform, like closing resources
}
}

我看到“ MySQL服務器已消失”錯誤消息:

 MySQL ERROR №2006 MySQL server has gone away[qs:SELECT id FROM haiku LIMIT 10 OFFSET 1] 

(/var/www/html/haiku_server/vendor/chrisboulton/php-resque/resque.php   line 77
Resque_Worker->work(5) >> /var/www/html/haiku_server/vendor/chrisboulton/php-resque/lib/Resque/Worker.php   line 199  
Resque_Worker->perform(Object) >> /var/www/html/haiku_server/vendor/chrisboulton/php-resque/lib/Resque/Worker.php   line 237
Resque_Job->perform() >> /var/www/html/haiku_server/vendor/chrisboulton/php-resque/lib/Resque/Job.php   line 182
AsyncTest->perform() >> /var/www/html/haiku_server/includes/bgJobs/AsyncThreads.php   line 48          
Mysql->query("SELECT id FROM haiku LIMIT 10 OFFSET 1") >> /var/www/html/haiku_server/includes/Mysql.class.php   line 113   )

請注意,這不會發生,也就是說,當我執行php-resque操作時,mysql工作正常,例如:

if ($request->command == 'custom_script') {
    $mysql = Mysql::getInstance();
    EH::setErrorHandler();
    $haiku_step_query= $mysql->query("SELECT id FROM haiku LIMIT 10 OFFSET 1");
    $row = $mysql->fetch_assoc($haiku_step_query);
    $haiku_id = $row['id'];

}

看一下這個問題: https : //github.com/chrisboulton/php-resque/issues/269

可能的原因是,在第一次運行作業后,您的對象將保持加載到內存中,包括MySQL連接。 一種解決方案是在您的perform方法中重新連接到MySQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM