解决MySQL封包过大而导致无法汇入资料的问题

如果你有将档案存入在MySQL资料库的话,就很有可能遇到此问题,因为MySQL在执行SQL指令的时候是有大小限制的,单一个SQL指令的大小预设为16MB,其实已经很大了,但是如果你的档案超过这个大小的话,在执行Insert或Update指令的时候就有可能会发生ERROR 2006 (HY000): MySQL server has gone away的错误讯息。

这问题不只会发生在「开发时期」,也很可能发生在「资料转移」的时,也就是你可能接了别人的案子,在做开发环境重建的时候可能会发现资料怎样都汇入不了,但汇出资料却是正常的!

要解决这个问题有好几种作法:

1.执行汇入指令时特别指定--max_allowed_packet参数,让连线的最大允许封包大小瞬间提高。

mysql -u root --max_allowed_packet=32M DbName < data.sql

2.修改MySQL的全域设定档my.ini

若在Linux环境下,预设路径在/etc/my.cnf ,如果没这个档案的话你自己新增一个也行,或找出my.cnf在哪里(可以透过locate指令搜寻),设定的内容如下:

[mysqld]

#设定最大可接受封包大小(32MB)
set-variable = max_allowed_packet=33554432

若在Windows环境,预设是在C:\my.ini ,也有可能在c:\windows\my.ini或在MySQL的安装目录下。