[Err] 2006 - MySQL server has gone away

/ Markbug / 没有评论 / 439浏览

今天准备将服务器中数据库的备份脚本导入到本地时,遇到了上述问题。由于我的数据库备份脚本是采用的mysql中自带的mysqldump命令。所以一定不会是备份脚本出了问题。一定是导入的时候出现了问题。但导入时,我是通用navicat for mysql数据库连接工具导入的,所以也不太可能是工具的问题。于是猜测只能是自己本地mysql数据库的问题了,按照这个思路,于是在网上找到了问题的解决方案。

网上的资料显示造成上述错误的主要原因就是sql的操作时间太长导致的,因为我的数据库备份脚本全是INSERT语句,所以才会造成这个原因。既然找到了问题的原因,那么解决起来就很容易了。因为mysql中提供了相关参数也就是max_allowed_packed参数。具体的使用如下:

查询max_allowed_packet现在的大小:

show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set, 1 warning (0.01 sec)

修改max_allowed_packet的大小:

set global max_allowed_packet=1024*1024*16;
Query OK, 0 rows affected (0.00 sec)

再次查询max_allowed_packet现在的大小:

show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set, 1 warning (0.00 sec)

我们看到max_allowed_packet的大小已经被我们设置为最新的配置了。所以,通过上述的参数设置,就可以解决上述导入sql报错的问题,但是上述的设置是临时的,重启mysql后就会失效。要想长久有效,只需要在my.cnf中添加max_allowed_packet参数即可。

相关资料:http://www.jb51.net/article/23781.htm