问题在这里

有一个脚本在 X 时间后(5 到 40 分钟之间的未知数量)抛出以下错误:MySQL 服务器已经消失,Kohana 变成了 Database_Exception 2006 因此,某些信息未保存到数据库中。

这是我认为可能有效的方法

class Model_Bar extends ORM { 
 
protected $_belongs_to = array( 
    'foo' => array() 
); 
 
public function save(){ //Extends the save method 
    try { 
        $result = parent::save(); //Try parent save 
    }  catch (Database_Exception $e) { //Catch exception 
        if ($e->getCode() == 2006) { //If exception code == 2006 then DB has gone away 
            mysqli_ping(); //Try to refresh DB link 
            $result = parent::save(); //Try parent save again 
        } else { //Exception code != 2006 
            throw new Exception($e); //Throw new DB exception 
        } 
    } 
    return $result; // Return the result from parent::save() 
    } 
} 

问题:如何在 Kohana 的 ORM 中刷新到数据库的链接?

更多信息:

谢谢!

请您参考如下方法:

两者皆有问题

  • 达到了 MYSQL 配置的超时时间
  • 超出数据包大小
  • 数据包丢失

如果您正在执行长插入,如批量插入,如果您的数据库没有为此配置,则代码中的任何更改都不会产生任何影响。您可能会尝试重新配置您的 MYSQL 实例,然后排除 MYSQL 的责任,然后在您尝试修改您的代码之后(我怀疑这是问题的根源)。重试保存不会有太大帮助,但会使数据库更加繁忙。

另一件事,如果您使用代理(如 HAProxy),请同时检查超时。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!