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

数据库 投稿 11000 0 评论

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 这种错误了,这里就不一一详解了。

编程笔记 » mysql select查询报General error 2006 MySQL server has gone away...错误的解决办法

赞同 (49) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽