在我们使用 mysql 导入大文件 sql 时可能会报 MySQL server has gone away 错误, 该问题是 max_allowed_packet 配置的默认值设置太小, 只需要相应调大该项的值之后再次导入便能成功. 该项的作用是限制 mysql 服务端接收到的包的大小, 因此如果导入的文件过大则可能会超过该项设置的值从而导致导入不成功! 下面我们来看一下如何查看以及设置该项的值.
查看 max_allowed_packet 的值
- mysql> show global variables like 'max_allowed_packet';
- +--------------------+---------+
- | Variable_name | Value |
- +--------------------+---------+
- | max_allowed_packet | 4194304 |
- +--------------------+---------+
可以看到默认情况下该项的大小只有 4M, 接下来将该值设置成 64M(1024*1024*64)
- mysql> set global max_allowed_packet=67108864;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show global variables like 'max_allowed_packet';
- +--------------------+-----------+
- | Variable_name | Value |
- +--------------------+-----------+
- | max_allowed_packet | 67108864 |
- +--------------------+-----------+
- 1 row in set (0.00 sec)
通过调大该值, 一般来说再次导入应该就能成功了, 如果任然报错, 则继续再调大一些就行, 请注意通过在命令行中进行设置只对当前有效, 重启 mysql 服务之后则恢复默认值, 但可以通过修改配置文件 (可以在配置文件 my.cnf 中添加 max_allowed_packet=64M 即可) 来达到永久有效的目的, 可其实我们并不是经常有这种大量数据的导入操作, 所以个人觉得通过命令行使得当前配置生效即可, 没有必要修改配置文件.
来源: http://www.bubuko.com/infodetail-2673493.html