php 多进程下mysql连接 gone away

来源:互联网 发布:mac 安全模式 编辑:程序博客网 时间:2024/06/03 12:14

php 在命令行模式下启动多进程如果父进程有sql查询,可能会导致子进程里面的sql查询 报错  General error: 2006 MySQL server has gone away

当fork的子进程都共用相同的mysql连接的时候,会出现该错误,每个子进程单独一个mysql连接即可解决。

解决办法:在子进程执行之前,先把mysql的连接close即可。

$db = \Yii::$app->getDb();$bizs = $db->createCommand("select xx from xxx where status = 0")->queryAll();foreach ($bizs as $biz) {    $biz = $biz['biz'];    // 创建子进程    $pid = pcntl_fork();    if ($pid == -1) {        // 返回值为-1,创建失败        die('could not fork');    } elseif ($pid) {        // 返回值大于0,是父进程        echo "parent \t", date("H:i:s", time()), "\n";    } else {        // 返回值等于0,是子进程        echo "child \t", date("H:i:s", time()), "\n";        try{            \Yii::$app->db->close();// solve 子进程 MySQL server has gone            $this->run($biz);        }catch (Exception $e){            var_dump($e);        }    }}\Yii::$app->db->close();// solve 主进程 MySQL server has gone



原创粉丝点击