有一个无限循环的do{ doSomethingIfNeeded(); } while(true)运行在cli php脚本中,如果满足条件,doSomethingIfNeeded()将执行一些DB操作。
问题是等待时间甚至可以长达12个小时,因此我得到了通用错误:2006年MySQL服务器在异常跟踪结束时已经离开了和Doctrine\DBAL\Connection::executeQuery。
我应如何处理有关的问题?我是否应该配置mysql来处理长时间等待的cli脚本,而不影响常见的php脚本?
我有几个主意。
select 1 )添加到cli脚本中Upd:找到了zf2+doctrine2 - http://circlical.com/blog/2013/9/12/mysql-server-has-gone-away-atop-doctrine2-and-zend-framework-2的解决方案
Upd2:找到了一个使用zf2 ServiceManager - ZF2 + Doctrine2: Server has gone away - how to jog an old connection?的解决方案。
发布于 2015-12-29 23:05:17
当您不使用时,您可以简单地断开连接,如果它与您的条件匹配,则重新连接到MySQL。我怀疑这会对业绩造成负面影响。例如,
while (true) {
if ($condition) {
$db->connect();
/* your code goes here */
$db->disconnect();
}
}如果出于某种原因你想让它保持开着,你可以让它在1分钟的不活动后与MySQL断开连接。
$lastActiveTime = 0;
$isConnected = false;
while (true) {
if ((time()-$lastActiveTime)>60) {
$isConnected = false;
$db->disconnect();
}
if ($condition) {
if (!$isConnected) $db->connect();
$lastActiveTime = time();
}
}https://stackoverflow.com/questions/34519289
复制相似问题