我有一个来自数据库的MYSQL转储我正试图转移到新的数据库服务器。当我尝试导入我的SQL转储时,收到以下错误:
MySQL Error 2006 (HY000) at line 406: MySQL server has gone away
我搜索了问题,大多数人通过更改wait_timeout的值来解决问题。但是,我当前的值设置为28800(8小时),并且在运行导入时错误出现的时间不到8秒。
我也尝试将max_allowed_packet的值设置为1073741824,但这也无法解决问题。
通过mysql转储,转储中有相当多的blob列,但整体文件大小只有6 MB。
有没有人对这可能是什么问题有任何想法?
答案 0 :(得分:47)
为了未来搜索者的利益添加此答案,因为它解释了为什么增加数据包大小可以解决问题:
情况是,如果客户端发送的SQL语句长于服务器max_allowed_packet设置,则服务器将断开客户端的连接。来自同一客户端实例的下一个查询将发现'MySQL服务器已经消失'。
...但是,如果出现问题,最好让'got packet larger'错误[错误:2020(CR_NET_PACKET_TOO_LARGE)]返回。
摘自并感谢peter_laursen's blog post
在OSX 10.7(Lion)上,我创建了一个文件/etc/my.cnf,其中包含以下内容:
[mysqld]
max_allowed_packet = 12000000
然后停止了mysql服务器:
/usr/local/bin/mysql.server stop
当它自动重启时,我能够执行我的插入。
答案 1 :(得分:6)
在尝试导入130 MB文件时,将max_allowed_packet增加到12 MB(12000000)解决了我的问题。
更改ini文件或在MySQL Workbench中选择文件/网络(需要重启MySQL)。
如果仍然出现错误,请尝试增加更多(100 MB)。你记得在完成后减少它。
答案 2 :(得分:0)
1)更改MySql配置文件: # /etc/mysql/my.cnf
<input type="file" accept="image/*">
2)MySql deamon重启
#section
#
[mysqld]
#
key_buffer = 32M
max_allowed_packet = 32M
thread_stack = 512K
thread_cache_size = 64
#
应该解决你的问题。