项目场景:
导入sql文件报错:MySQL server has gone away 以及解决方法问题描述:
在我们使用mysql导入大文件sql时可能会报MySQL server has gone away错误原因分析:
该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功。该项的作用是限制mysql服务端接收到的包的大小,因此如果导入的文件过大则可能会超过该项设置的值从而导致导入不成功!下面我们来看一下如何查看以及设置该项的值。
解决方案:
查看目前配置
show VARIABLES like ‘%max_allowed_packet%’;
显示的结果为:
±-------------------±--------+
| Variable_name | Value |
±-------------------±--------+
| max_allowed_packet | 524288000 |
±-------------------±--------+
以上说明目前的配置是:500MB(一般来讲很多未修改过的默认应该是4MB,所以一旦语句体过大就会报错,所以可以适当根据要导入的SQL适当调大就可以)
或者用可视化工具连接数据库执行show VARIABLES like ‘%max_allowed_packet%’;显示如下
修改方法
1、修改配置文件
可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。
max_allowed_packet = 20M
如果找不到my.cnf可以通过
mysql --help | grep my.cnf
去寻找my.cnf文件。
linux下该文件在/etc/下。
2、在mysql命令行中修改
在mysql 命令行中运行
set global max_allowed_packet = 210241024*10
然后退出命令行,重启mysql服务,再进入。
show VARIABLES like ‘%max_allowed_packet%’;
查看下max_allowed_packet是否编辑成功
注意:该值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败。