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

当前回答

如果这些答案都不能解决你的问题,我通过删除表,并以这种方式自动创建它们来解决它:

when creating the backup, first backup structure and be sure of add:
DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT
CREATE PROCEDURE / FUNCTION / EVENT
IF NOT EXISTS
AUTO_INCREMENT

然后只需将此备份与您的db一起使用,它将删除并重新创建您需要的表。

然后你只备份数据,然后做同样的事情,它就会工作。

其他回答

这里可能会发生一些事情;

插入运行时间过长,客户端正在断开连接。当它重新连接时,它没有选择数据库,因此出现了错误。这里的一个选项是从命令行运行批处理文件,并在参数中选择数据库,如下所示;

$ mysql db_name < source.sql

另一种方法是通过php或其他语言运行命令。在每个长时间运行的语句之后,您可以关闭并重新打开连接,以确保在每个查询开始时都已连接。

如果这些答案都不能解决你的问题,我通过删除表,并以这种方式自动创建它们来解决它:

when creating the backup, first backup structure and be sure of add:
DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT
CREATE PROCEDURE / FUNCTION / EVENT
IF NOT EXISTS
AUTO_INCREMENT

然后只需将此备份与您的db一起使用,它将删除并重新创建您需要的表。

然后你只备份数据,然后做同样的事情,它就会工作。

消除触发警告的错误是我的最终解决方案。我还改变了max_allowed_packet,这有助于较小的文件与错误。消除这些错误也会极大地加快这个过程。

添加max_allowed_packet=64M到[mysqld]

[mysqld] 
max_allowed_packet=64M

重新启动MySQL服务器。

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

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

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

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

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