当我试图获取一个大的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

当前回答

对于寻找DB导入失败解决方案的Drupal 8用户:

在sql转储文件的末尾,可以命令插入数据到“webprofiler”表。 这是我猜一些调试日志文件,并不是真正重要的网站工作,所以所有这些可以删除。我删除了所有这些插入,包括LOCK TABLES和UNLOCK TABLES(以及两者之间的所有内容)。它在sql文件的最底部。问题描述如下:

https://www.drupal.org/project/devel/issues/2723437

但是除了截断该表之外,没有其他解决方案。

顺便说一句,我尝试了以上答案中的所有解决方案,其他都没有帮助。

其他回答

您可以增加最大允许包数

SET GLOBAL max_allowed_packet=1073741824;

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

您还可以以root(或SUPER特权)身份登录到数据库并执行该操作

set global max_allowed_packet=64*1024*1024;

不需要重新启动MySQL。注意,你应该修复my.cnf文件,就像在其他解决方案中概述的那样:

[mysqld]
max_allowed_packet=64M

重新启动MySQL后确认更改:

show variables like 'max_allowed_packet';

您也可以使用命令行,但这可能需要更新启动/停止脚本,这些脚本可能无法在系统更新和补丁中保存。

根据要求,我在这里添加了我自己的答案。很高兴看到它工作!

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

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

如何使用mysql客户端像这样:

mysql -h <hostname> -u username -p <databasename> < file.sql

我也有同样的问题,但改变my.ini/my.cnf文件下[mysqld]的max_allowed_packet。

添加一条线

max_allowed_packet=500M

现在重新启动MySQL服务,一旦你完成。