ThinkPHP出现General error: 2006 MySQL server has gone away的解决方法
错误:
#13 {main}SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
FILE: \ThinkPHP\Library\Think\Db\Driver.class.php(169)
原因分析:
本次错误提示是在cli模式运行,隔一段时间就会出现,查询资料后发现mysql默认没隔8个小时(2880000秒)就会断开
解决方案,解决方式找了三个
方法1
配置mysql.cnf(windows系统则是my.ini),指定wait_timeout和interactive_timeout,设置一个比较大的值,比如一年(86400*365)。
方法2
链接后通过执行命令来指定本次链接的wait_timeout和interactive_timeout,原理跟【1】一样,只不过这种方式只影响本次链接,方式【1】会影响所有链接。
但是thinkphp已经封装好了数据库驱动,所以不好单独指定某一次。我的做法是判断php_sapi,如果是cli则设置wait_timeout和interactive_timeout
// ThinkPHP\Library\Think\Db\Driver.class.php 第 105行
if(PHP_SAPI == 'cli'){
$query = $this->linkID[$linkNum]->prepare("set session wait_timeout=31536000,interactive_timeout=31536000,net_read_timeout=10000");
$query->execute();
}
方法3
既然是超时断开了,那我们就可以采取断线重连的方式
// ThinkPHP\Library\Think\Db\Driver.class.php 第 105行
$this->linkID[$linkNum]->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->linkID[$linkNum]->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$this->linkID[$linkNum]->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// ThinkPHP\Library\Think\Db\Driver.class.php 第159行(query方法) 和 220行(execute方法)
try {
$this->PDOStatement = $this->_linkID->prepare($str);
} catch (\PDOException $e) {
// 断线重连
if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) {
echo "---> db reconnecting...\n";
$this->linkID = array();
$this -> _linkID = null;
$this->initConnect(false);
$this->PDOStatement = $this->_linkID->prepare($str);
}
}
ThinkPHP出现General error: 2006 MySQL server has gone away的解决方法的更多相关文章
- Yii 数据库重连告别General error: 2006 MySQL server has gone away
General error: 2006 MySQL server has gone away 错误原因 制造错误 解决办法 最新办法 错误原因 Mysql has gone away MySQL 服务 ...
- MySQL(Navicat)运行.sql文件时报错:[Err] 2006 - MySQL server has gone away 的解决方法
背景: 今天导入一个数据量很大的.sql文件时,报错: 原因: 可能是sql语句过长,超过mysql通信缓存区最大长度. 解决:1. 编辑 MySQL 安装目录下的 my.ini,在最后添加以下内容: ...
- General error 2006 MySQL server has gone away
写入配置文件的办法: max_allowed_packet = 16M //但是这种有时候不支持,1024*1024*16这种有的也不支持 max_allowed_packet = 16777216 ...
- MySQL(Navicat)运行.sql文件时报错[Err] 2006 - MySQL server has gone away 的解决方法
在my.ini里加上 max_allowed_packet=16M
- flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)
这篇主要介绍在这次项目中使用的peewee 文档地址:http://peewee.readthedocs.org/en/latest/index.html 首先我们要初始化一个数据库连接对象.这里我使 ...
- MySQL server has gone away的解决方法
用Python写了一个http服务,需要从mysql读数据库,第一天还好好的,第二天突然不行了.报错如下: pymysql.err.OperationalError: (2006, 'MySQL se ...
- 黄聪:Mysql数据库还原备份提示MySQL server has gone away 的解决方法(备份文件数据过大)
使用mysql做数据库还原的时候,由于有些数据很大,会出现这样的错误:The MySQL Server returned this Error:MySQL Error Nr. MySQL server ...
- mysql导入大批量数据出现MySQL server has gone away的解决方法
因工作需要,需要导入一个200M左右的sql到user库 执行命令 mysql> use user Database changed mysql> source /tmp/user.sql ...
- ERROR 1130:mysql 1130连接错误的有效解决方法
今天在用sqlyog连接非本地的Mysql服务器的数据库,居然无法连接很奇怪,报1130错误, ERROR 1130: Host 192.168.3.100 is not allowed to con ...
随机推荐
- 判断一棵树是否为二叉搜索树(二叉排序树) python
输入一棵树,判断这棵树是否为二叉搜索树.首先要知道什么是排序二叉树,二叉排序树是这样定义的,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的 ...
- Java第五次作业--面向对象高级特性(抽象类和接口)
一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计 掌握接口的设计 理解简单工厂设计模式 理解抽象类和接口的区别 掌握包装类的应用 掌握对象的比较方法和比较器的使用 学习使用日期操 ...
- java 之DelayQueue,TaskDelayed,handlerFactory,dataChange消息配置.收发等.java spring事务处理TransactionTemplate
java 之DelayQueue,TaskDelayed,handlerFactory,dataChange消息配置.收发等.java spring事务处理TransactionTemplate等. ...
- .NET/C# 使用反射调用含 ref 或 out 参数的方法
使用反射,我们可以很容易地在运行时调用一些编译时无法确定的属性.方法等.然而,如果方法的参数中包含 ref 或 out 关键字的时候,又该怎么调用呢? 本文将介绍如何反射调用含 ref 或 out 关 ...
- 老毛桃(U盘启动盘)
1.制作U盘启动盘: http://www.laomaotao.org/jiaocheng/92/upzwin7.html 2.老毛桃U盘快速安装gost win7系统教程: http://www.l ...
- TCP拥塞控制机制
研究TCP的拥塞机制,不仅仅是想了解TCP如何的精巧,更多的是领悟其设计思想,即在一般情况下,我们该怎样处理问题. 一.拥塞的发生与其不可避免 拥塞发生的主要原因:在于网络能够提供的资源不 ...
- HDU 3973 AC's String 字符串哈希
HDU 3973 通过哈希函数将一个字符串转化为一个整数,通过特定的方式可以使得这个哈希值几乎没有冲突(这就是关键之处,几乎没有视为没有= =!, 其实也可以考虑实现哈希冲突时的处理,只是这道题没必要 ...
- Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)
Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...
- vue-cli 本地开发mock数据使用方法
vue-cli 中可以通过配置 proxyTable 解决开发环境的跨域问题,具体可以参考这篇文章: Vue-cli proxyTable 解决开发环境的跨域问题 如果后端接口尚未开发完成,前端开发一 ...
- 基于ffmpeg静态库的应用开发
最近几天在试着做基本ffmpeg静态库的开发,只有main中包含了avdevice_register_all 或avfilter_register_all,编译就通不过,undefined refre ...