2012-01-05 120 views
19

我有一个数据库的MYSQL转储,我试图移动到一个新的数据库服务器。当我试图导入我的SQL转储,我收到以下错误:MySQL错误2006(HY000)在线406:MySQL服务器已经消失

MySQL Error 2006 (HY000) at line 406: MySQL server has gone away 

我一派的问题,大多数人通过改变WAIT_TIMEOUT值固定的问题。但是,我当前的值设置为28800(8小时),并且运行导入时错误出现在少于8秒内。

我也尝试将max_allowed_pa​​cket的值设置为1073741824,但那也没有解决问题。

翻阅mysql转储,转储中有相当多的blob列,但整个文件大小只有6 MB。

有没有人有什么可能是什么问题的想法?

+2

作为一种解决方法,我回到源数据库服务器并创建了几个较小的转储文件(每次5个表)。然后,我导入了每个较小的转储文件,这使我可以在不出现错误消息的情况下完成数据库传输。 – David 2012-01-05 15:31:36

回答

6

将max_allowed_pa​​cket增加到12 MB(12000000)解决了我在尝试导入130 MB文件时遇到的问题。

更改ini文件或在MySQL Workbench中的选项文件/网络下(需要重新启动MySQL)。

如果仍然出现错误,请尝试增加更多(100 MB)。只要记得在完成后减少它。

47

添加这个答案对未来搜索的好处,因为它解释了为什么增加数据包大小固定的问题:

The situation is that if a client sends a SQL-statement longer than the server max_allowed_packet setting, the server will simply disconnect the client. Next query from the same client instance will find that the ‘MySQL server has gone away’.

... But it would of course be much preferable to have the ‘got packet bigger’ error [Error: 2020 (CR_NET_PACKET_TOO_LARGE)] returned if that is the problem.

摘自并感谢peter_laursen's blog post

在OSX 10.7(狮子),我创建了一个具有以下内容的文件/etc/my.cnf:

[mysqld] 
max_allowed_packet = 12000000 

然后停止t他mysql服务器:

/usr/local/bin/mysql.server stop 

当它自动重新启动我能够执行我的插入。

+1

嗯,即使对于max_allowed_pa​​cket = 512M,我也遇到了同样的问题 – 2013-10-18 08:09:46

+1

@AbhijitBuchake - 那么它可能不是'数据包太大'的问题,而是其他原因。不幸的是,我对你没有任何其他建议。 – 2013-10-21 15:26:16

+1

谢谢!我已阅读并尝试了十几种场景。我已经重新安装了3次mysql。上面的my.cnf技巧修复了它。我试图通过命令行将一个50米的mysql数据库添加到mysql中。这完全是我的一天! – user24793 2015-11-13 19:43:55

0

1)改变MySQL的配置文件: # /etc/mysql/my.cnf

#section 
# 
[mysqld] 
# 
key_buffer    = 32M 
max_allowed_packet  = 32M 
thread_stack   = 512K 
thread_cache_size  = 64 
# 

2)MySQL的守护进程重新启动

/etc/init.d/mysql restart 

应该可以解决你的问题。

相关问题