解决#2006 - MySQL server has gone away错误

使用php插入大数据记录到Mysql的时候,遇到一个问题:

2006:MySQL server has gone away :: insert into ******

经过查找,知道了原因,是Mysql的max_allowed_packet的值设置得过小或者没有设置,此变量是用来控制其通信缓冲区的最大长度。

解决方法:

[mysqld]
max_allowed_packet = 16M

在my.cnf文件中设置上述变量到mysqld段中,如果没有就添加。

关于max_allowed_packet的主要解释如下:

包或任何生成的/中间字符串的最大大小。这个过程大部分发生在load data file中,有时也发生在update,insert中。

包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。该值默认很小,以捕获大的(可能是错误的)数据包。

如果你使用大的BLOB 列或长字符串,你必须增加该值。应同你想要使用的最大的BLOB一样大。max_allowed_packet的协议限制为1GB。这个值必须是1024的倍数;如果不是1024倍数的值,mysql就会自动四舍五入为最接近的1024的倍数。

当你改变max_allowed_packet的值,你就改变了消息缓冲区的大小,你也应该在客户端允许的范围内修改客户端的buffer大小。在客户端,max_allowed_packet默认值是1GB。你可以通过命令行或者配置文件,改变客户端的max_allowed_packet值。

在MySQL5.0.84版本中,会话max_allowed_packet值,还只是只读的。在5.0.84之前的版本,设置会话中可以设置max_allowed_packet的值,但是没什么作用。

时间: 2024-09-29 07:51:53

解决#2006 - MySQL server has gone away错误的相关文章

mysql报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的值后,被s

General error: 2006 MySQL server has gone away

我自己人的经历 先简单介绍一下这个新手卡录入后台,这个后台是提供给产品人员使用.可以向某个游戏的某个特定分区批量录入新手卡信息,方便玩家获取.后台设置的一次性最大录入量为500. 先看日志吧,报错的内容和日志的相同: Error: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away 这个错误信息很好的描述了是数据库超时引起的.以前听前辈说过,应该是wait_timeout环境变量设置的有问题.可是查看后,发现wait_t

MySQL导入sql脚本错误:2006 - MySQL server has gone away

到如一些小脚本很少报错,但最近导入一个10+M的SQL脚本,却重复报错: Error occured at:2014-03-24 11:42:24 Line no.:85 Error Code: 2006 - MySQL server has gone away 最终找到原因,原来是MySQL导入大批量数据的时候超出了默认允许最大的数据包所以就提示2006 - MySQL server has gone away 于是找到my.cnf,在[mysqld]加入:    代码如下 复制代码 max_

MySQL server has gone away错误提示解决方法_Mysql

大概浏览了一下,主要可能是因为以下几种原因: 一种可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可. 还有一种可能是因为某些原因导致超时,比如说程序中获取数据库连接时采用了Singleton的做法,虽然多次连接数据库,但其实使用的都是同一个连接,而且程序中某两次操作数据库的间隔时间超过了wait_timeout(SHOW STATUS能看到此设置),那么就可能出现问题.最简单

Navicat中MySQL server has gone away错误怎么办

今天备份了一下本站的数据,生成的sql文件比较大,当然,这个sql是包含了比较多的冗余数据.用Navicat直接导入的话,报错MySQL server has gone away.如下图所示: 解决办法 打开navicat的菜单中的tools,选择server monitor,然后在左列选择数据库,右列则点选variable表单项,寻找max_allowed_packet,将其值改大. 改好之后,再次导入备份的sql文件,一切正常. 如果还是无法解决,下面我整理了一些mysql查询中碰到MySQ

Can t connect to mysql server on localhost (10061) 错误

解决1: 打开任务管理器-服务-MYSQL**  看其状态是否已启动,如未启动,右键启动后,重新打开Mysql command line Client,重启Mysql. 解决2: host文件(host文件在C:/WINDOWS/system32/drivers/etc目录下)中添加   127.0.0.1       localhost   打开my.ini,在[mysqld]添加 bind-address = 127.0.0.1   重启mysql 解决3: 1.修改安装目录下的my.ini

安全狗优化mysql导致Can't connect to MySQL server on 'localhost' (10061)错误

如下所示利用安全狗优化一下mysql 然后再运行下面程序报错了 <? $cn = mysql_connect('localhost','用户名','密码') or die(mysql_error()); if( $cn ) { echo 'success'; } else { echo 'fa'; } ?> 结果是 Can't connect to MySQL server on 'localhost' (10061) 结果我去看服务看看是不是启动了,如下图只有"启动"两个

MySQL server has gone away 问题的解决方法_Mysql

mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入). 产生这个问题的原因有很多,总结下网上的分析: 原因一. MySQL 服务宕了 判断是否属于这个

MySQL server has gone away

MySQL server has gone away  运行sql文件导入数据库时,会报异常MySQL server has gone away  mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packe