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 ...
随机推荐
- memcache+php实现页面访问的加速
一.什么是memcache memcache是目前主流的一个高性能的分布式内存对象缓存系统:它以key-value形式在内存中存储数据.由于数据缓存在内存中,所以相比操作DB而言,它不需要解析SQL. ...
- 使用POI导出Excel(二)-利用模板
一.基本操作见: 使用POI导出Excel 二.本次功能需求 给了一个模板,里面有6个sheet页,每页里面都需要填充相应的数据.如图: 三.需求分析 1.分了6个sheet页,每页的数据都不一样,首 ...
- 7-26 Harry Potter's Exam(25 分)
In Professor McGonagall's class of Transfiguration, Harry Potter is learning how to transform one ob ...
- streamsets 错误记录处理
我们可以在stage 级别,或者piepline 级别进行error 处理配置 pipeline的错误记录处理 discard(丢踢) send response to Origin pipeline ...
- 使用VS2008进行WEB负载测试
软件测试中使用VS2008进行WEB负载测试 最近接触关于多线程的软件测试,所以对vs2005里的测试开始感兴趣,今天学习试用了一下,记下所获得的. vs 测试分“WEB测试”,“单元测试”,“负载测 ...
- 开始SDK之旅-入门2-集成流程图、轨迹图到系统
http://bbs.ccflow.org/showtopic-2562.aspx 经测试,基本可用,还需增加 WF/Admin/pub.ascx 首先你得先理解流程图的数据的获取方式,其他的就很容易 ...
- 复制mysql数据库的步骤
Navicat 转存sql文件 然后命令 mysql -uroot -p123456 dbname < e:/backup/20141014.sql
- mariadb master and salve configure
mariadb master and salve configure 主从复制配置: master:192.168.8.200 salve:192.168.8.201 主服务器配置: 主服务器需要启动 ...
- 给iOS开发新手送点福利,简述UITextField的属性和用法
UITextField属性 0. enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...
- Linux nohup和&的功效
nohup和&究竟有啥区别?不少同学进行了回复,但并不是所有同学都理解得全对,今天把自己挖的坑自己填了. 测试代码如下: 是一个输出hello与循环轮数的死循环程序,每输出一行就休眠1秒. 使 ...