首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zf2。如何处理循环cli脚本中mysql连接的超时?

zf2。如何处理循环cli脚本中mysql连接的超时?
EN

Stack Overflow用户
提问于 2015-12-29 21:23:24
回答 1查看 536关注 0票数 1

有一个无限循环的do{ doSomethingIfNeeded(); } while(true)运行在cli php脚本中,如果满足条件,doSomethingIfNeeded()将执行一些DB操作。

问题是等待时间甚至可以长达12个小时,因此我得到了通用错误:2006年MySQL服务器在异常跟踪结束时已经离开了Doctrine\DBAL\Connection::executeQuery

我应如何处理有关的问题?我是否应该配置mysql来处理长时间等待的cli脚本,而不影响常见的php脚本?

我有几个主意。

  1. 将ping (每分钟只执行select 1 )添加到cli脚本中
  2. wait_timeout设置为86400。
  3. 还要别的吗?

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?的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2015-12-29 23:05:17

当您不使用时,您可以简单地断开连接,如果它与您的条件匹配,则重新连接到MySQL。我怀疑这会对业绩造成负面影响。例如,

代码语言:javascript
复制
while (true) {
    if ($condition) {
        $db->connect();
        /* your code goes here */
        $db->disconnect();
    }
}

如果出于某种原因你想让它保持开着,你可以让它在1分钟的不活动后与MySQL断开连接。

代码语言:javascript
复制
$lastActiveTime = 0;
$isConnected = false;
while (true) {
    if ((time()-$lastActiveTime)>60) {
        $isConnected = false;
        $db->disconnect();
    }
    if ($condition) {
        if (!$isConnected) $db->connect();
        $lastActiveTime = time();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34519289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档