当我试图获取一个大的SQL文件(一个大的INSERT查询)时,我得到这个错误。

mysql>  source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: *** NONE ***

表中没有任何内容被更新。我尝试了删除和恢复表/数据库,以及重新启动MySQL。这些都不能解决问题。

这是我的最大数据包大小:

+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+

下面是文件大小:

$ ls -s file.sql 
79512 file.sql

当我尝试另一种方法时……

$ ./mysql -u root -p my_db < file.sql
Enter password: 
ERROR 2006 (HY000) at line 1: MySQL server has gone away

当前回答

如果您已经尝试了所有这些解决方案,特别是将max_allowed_packet增加到最大支持的1GB,您仍然看到这些错误,这可能是您的服务器没有足够的空闲RAM内存可用…

解决方案=将服务器升级到更大的RAM内存,然后再试一次。

注意:我很惊讶这个简单的解决方案在这个话题上讨论了8年多之后还没有被提及……有时候我们开发人员会想太多。

其他回答

由于某些原因,全局更新和my.cnf设置对我不起作用。将max_allowed_packet值直接传递给客户端工作在这里:

mysql -h <hostname> -u username -p --max_allowed_packet=1073741824 <databasename> < db.sql

您可以增加最大允许包数

SET GLOBAL max_allowed_packet=1073741824;

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

我尝试了以上所有的解决方案,都失败了。

我最终使用-h 127.0.0.1,而不是使用默认的var/run/mysqld/mysqld.sock。

如果你在Mac上,像我一样通过brew安装mysql,下面的方法是有效的。

Cp $(brew——prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf

出处:对于自制mysql安装,my.cnf在哪里?

在/usr/local/etc/my.cnf文件中增加max_allowed_packet=1073741824 mysql。服务器重启

添加max_allowed_packet=64M到[mysqld]

[mysqld] 
max_allowed_packet=64M

重新启动MySQL服务器。