Doctrine orm Gearman,ZF2,Doctrine2,MySQL,SQLSTATE[HY000]:一般错误:2006年MySQL服务器已经消失
我使用ZF2、Doctrine2、MySQL和Gearman。 当Gearman定期工作时出现错误: SQLSTATE[HY000]:一般错误:2006年MySQL服务器已经消失。 我尝试了以下步骤来解决问题: 1)我调查了MySQL查询。 没有任何问题。它简单(没有子查询)且快速。 例如,这是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服务器离开时的一个查询的解释 +-------------+-------+-------+-----------------------+-----------------------+---
+-------------+-------+-------+-----------------------+-----------------------+---------+-------+------+
| 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文档,它看起来像是数据库问题——“消失”错误意味着与数据库的连接超时。这在处理长时间运行的作业时非常常见。若要修复此问题,只需在作业开始时重新连接到数据库。的可能重复项