PHP程序mysql报错mysql has gone away


当前第2页 返回上一页

这个方案不是最好的。原因是: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方法。

1

2

3

4

5

6

7

$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方法。

1

2

3

4

5

6

7

8

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数据库配置文件中添加

1

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

这样就OK了。

相关推荐:

常驻内存的PHP程序mysql报错

以上就是PHP程序mysql报错mysql has gone away的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

mysql超详细讲解表的用法

mysql 的replace into详解

怎么用win r启动mysql

centos下安装mysql5.6.10和安全配置教程详解

mysql用户密码如何重新设置?

布尔教育燕十八mysql入门视频资料分享

mysql中in的用法是什么

20分钟mysql基础入门

mysql数据库忘记密码时如何修改?

mysql存储过程中实现执行动态sql语句的方法

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...