旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

PHP顺序mysql报错mysql has gone away【MySQL教程】,mysql,gone,php

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:69评论:0


导读:本文主要和人人分享常驻内存的PHP顺序mysql报错 mysqlhasgoneaway,在cli环境下,PHP顺序须要长时候运转,客户端与MySQL服务器之间的TCP衔...


本文主要和人人分享 常驻内存的PHP顺序mysql报错 mysql has gone away,在cli环境下,PHP顺序须要长时候运转,客户端与MySQL服务器之间的TCP衔接是不稳定的。

不稳定的缘由有以下能够:

  • MySQL-Server会在肯定时候内自动割断衔接

  • PHP顺序碰到余暇期时长时候没有MySQL查询,MySQL-Server也会割断衔接接纳资本

  • 其他状况,在MySQL服务器中实行kill process杀掉某个衔接,MySQL服务器重启

  • 收集发抖

这时候PHP顺序中的MySQL衔接就失效了。假如依然实行mysql_query,就会报一个MySQL server has gone away的毛病。顺序处置惩罚不到就直接碰到致命毛病并退出了。所以PHP顺序中须要断线重连。

解决计划

mysql_ping

有很多人提出了mysql_ping的计划,每次mysql_query举行衔接检测或许定时衔接检测。

这个计划不是最好的。缘由是:mysql_ping须要主动侦测衔接,带来了分外的斲丧。定时实行mysql_ping不能解决问题,如方才实行过mysql_ping检测以后,衔接就封闭了;

捕捉毛病码,举行断线重连

它的道理是:mysql_query实行后检测返回值,假如mysql_query返回失利,检测毛病码发现为2006/2013(这2个毛病示意衔接失利),再实行一次mysql_connect实行mysql_connect后,从新实行mysql_query假如mysql_query返回胜利,那末衔接是有用的,这是一次一般的挪用。

浩瀚着名的PHP常驻历程框架

  • swoole_framework中query要领。

$res = mysql_query($sql, $this->conn);if ($res === false)
{    if (mysql_errno($this->conn) == 2006 or mysql_errno($this->conn) == 2013)
    {        $r = $this->checkConnection();        if ($r === true)
        {
            continue;
        }
    }
  • workerman中数据库衔接类execute要领。

  protected function execute($query, $parameters = "")
    {        try {            ...
        } catch (PDOException $e) {
            // 服务端断开时重连一次            if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) {
                $this->closeConnection();
                $this->connect();            ...
        }
    }

很明显捕捉毛病码,举行断线重连,是高牢靠低斲丧的计划,引荐人人在常驻环境里运用。

thinkphp + phpworkman 运用

TP+workman也会涌现相似的状况,TP从 V5.0.6+版本最先,支撑Mysql的断线重连机制,默许封闭,须要的话,在application/databases.php数据库配置文件中增加

// 开启断线重连'break_reconnect' => true,

如许就OK了。

相干引荐:

常驻内存的PHP顺序mysql报错

以上就是PHP顺序mysql报错mysql has gone away的细致内容,更多请关注ki4网别的相干文章!

标签:mysqlgonephp


欢迎 发表评论: