MySQL连接闭合过程中并行的后台任务(MySQL Connection Closing Durin

2019-09-28 18:53发布

我已经写了基于这两个博客文章并行任务Zend框架基于cron服务:

  • 在Zend框架的应用程序的后台任务
  • 在并行Zend框架的后台任务

综上所述,cron的服务使用pcntl_fork()产卵的任务并行。

运行单个任务与服务工作没有问题,但是当我添加第二个任务,我得到这个MySQL错误:

一般错误:2006年MySQL服务器已消失

我最好的猜测是,一个子线程之前,另一端与MySQL连接是隐式关闭。 如果是这样的话,我该如何确保连接保持打开状态,直到父线程关闭?

Answer 1:

阅读上的评论后pcntl_fork()这个和SO问题 ,它的确是与孩子共享父连接的问题。 我加入这个代码来创建分叉后,一个新的MySQL连接,它似乎已经解决了这一问题:

// give this thread its own db connection
$settings = Zend_Registry::get('settings');
$db = Zend_Db::factory(
    $settings->db_adapter,
    array(
        'host' => $settings->db_host,
        'username' => $settings->db_user,
        'password' => $settings->db_pass,
        'dbname' => $settings->db_name,
    )
);
$db->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Db_Table::setDefaultAdapter($db);


文章来源: MySQL Connection Closing During Parallel Cron Tasks