mysql select查询报General error 2006 MySQL server has gone away…错误的解决办法

 
更多

最近的一个定时脚本select表的时候频繁报错,具体错误如:…… General error: 2006 MySQL server has gone away. The SQL statement executed was: SELECT * FROM ……,检查了一下发现是由于这是一个循环里面的select查询,而两次select的查询间隔超过了数据库定义的wait_timeout时长,即mysql长连接很久没有新的请求发起,达到了server端的wait_timeout的值后,被server强行关闭,即MySQL链接超时,经过一番测试,得出解决办法如下:

使用 mysql_ping() 函数 Ping 一个服务器连接,如果存在连接,则返回 true。如果失败,则返回 false。这里如果没有连接则重新连接。

<?php
class MySQL(){
	private $link;
	......
	function connect(){
		$this->link=mysql_connect('localhost','root','123456');
	}
	......
	function ping(){
		if(!mysql_ping($this->link)){
			mysql_close($this->link);//注意:一定要先执行数据库关闭,这是关键 
			$this->connect();//连接MySQL,当然这个方法根据自己的情况进行修改
		}
	}
	......
}

具体查看mysql服务器相关timeout的设置可使用如下查询命令:

show global variables like '%timeout';

得到的结果可能如下:

+—————————–+———-+
| Variable_name               | Value    |
+—————————–+———-+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 60       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 30       |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 3600     |
| wait_timeout                | 30       |
+—————————–+———-+

当然可能还有其他的情况会引起MySQL报 MySQL server has gone away 这种错误了,这里就不一一详解了。

打赏

本文固定链接: https://www.cxy163.net/archives/3631 | 绝缘体

该日志由 绝缘体.. 于 2015年11月23日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: mysql select查询报General error 2006 MySQL server has gone away…错误的解决办法 | 绝缘体
关键字: , , , ,

mysql select查询报General error 2006 MySQL server has gone away…错误的解决办法:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter