Doctrine orm Gearman,ZF2,Doctrine2,MySQL,SQLSTATE[HY000]:一般错误:2006年MySQL服务器已经消失

Doctrine orm Gearman,ZF2,Doctrine2,MySQL,SQLSTATE[HY000]:一般错误:2006年MySQL服务器已经消失,doctrine-orm,zend-framework2,gearman,Doctrine Orm,Zend Framework2,Gearman,我使用ZF2、Doctrine2、MySQL和Gearman。 当Gearman定期工作时出现错误: SQLSTATE[HY000]:一般错误:2006年MySQL服务器已经消失。 我尝试了以下步骤来解决问题: 1)我调查了MySQL查询。 没有任何问题。它简单(没有子查询)且快速。 例如,这是MySQL服务器离开时的一个查询的解释 +-------------+-------+-------+-----------------------+-----------------------+---

我使用ZF2、Doctrine2、MySQL和Gearman。 当Gearman定期工作时出现错误:

SQLSTATE[HY000]:一般错误:2006年MySQL服务器已经消失。

我尝试了以下步骤来解决问题:

1)我调查了MySQL查询。 没有任何问题。它简单(没有子查询)且快速。 例如,这是MySQL服务器离开时的一个查询的解释

+-------------+-------+-------+-----------------------+-----------------------+---------+-------+------+
| select_type | table | type  |     possible_keys     |          key          | key_len |  ref  | rows |
+-------------+-------+-------+-----------------------+-----------------------+---------+-------+------+
| SIMPLE      | t0    | const | UNIQ_8D93D649E7927C74 | UNIQ_8D93D649E7927C74 |     767 | const |    1 |
| SIMPLE      | t13   | const | UNIQ_BA388B79395C3F3  | UNIQ_BA388B79395C3F3  |       5 | const |    1 |
+-------------+-------+-------+-----------------------+-----------------------+---------+-------+------+
2)我尝试了来自的版本(用于重新连接到DB),但它对我没有帮助。我的一些问题也不知道了

3)我禁用了除3名测试人员外的所有齿轮工工作和工人。我清理了Gearman队列并重新启动Gearman服务器和Gearman workers。但这对我没有帮助

4)我为MySQL启用了以下设置: 允许的最大数据包长度=500米

   max_connections      = 2000
   max_user_connections = 300
   wait_timeout         = 3600
   net_read_timeout     = 3600
有人能帮忙吗?
谢谢

每个辅助脚本应在开始时连接到数据库,并在结束时断开连接。不要试图像MySQL超时一样保持打开连接,那么你的脚本不会注意到这就是为什么你会出现错误。

这是我在博客文章中描述的解决方案(俄语,你可以用谷歌翻译)

我使用这段代码来解决MySQL服务器已经消失的问题

public function disconnect()
{
    $this->getEm()->getConnection()->close();
}

public function connect()
{
    $this->getEm()->getConnection()->connect();
}

/**
 * MySQL Server has gone away
 */
public function reconnect()
{
    $connection = $this->getEm()->getConnection();
    if (!$connection->ping()) {

        Debug::vars("MySQL ping failed");

        $this->disconnect();
        $this->connect();

        $this->checkEMConnection($connection);
    }
}

/**
 * method checks connection and reconnect if needed
 * MySQL Server has gone away
 *
 * @param $connection
 * @throws \Doctrine\ORM\ORMException
 */
protected function checkEMConnection($connection)
{
    if (!$this->getEm()->isOpen()) {
        $config = $this->getEm()->getConfiguration();

        $this->em = $this->getEm()->create(
            $connection, $config
        );
    }
}

如果有任何线索,你能看看MySQL慢速查询日志吗?通常在数据库繁忙、运行备份、转储或类似操作时会发生这种情况。我清理了数据库。DB只有5行用于测试,我关闭了转储。这没有帮助,不管怎样,你是否启用了MySQL慢速查询日志,有什么问题吗?或者查看MySQL文档,它看起来像是数据库问题——“消失”错误意味着与数据库的连接超时。这在处理长时间运行的作业时非常常见。若要修复此问题,只需在作业开始时重新连接到数据库。的可能重复项