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

当前回答

当我使用Mysql集群时,我遇到了这个错误,我不知道这个问题是否来自集群的使用。由于误差是完全相同的,所以在这里给出我的解。 得到这个错误是因为数据节点突然崩溃。但是当节点崩溃时,你仍然可以使用cmd得到正确的结果:

ndb_mgm -e 'ALL REPORT MEMORYUSAGE'

mysqld也可以正常工作。所以一开始,我不明白是怎么回事。大约5分钟后,ndb_mgm结果显示没有数据节点工作。然后我意识到问题所在。因此,尝试重新启动所有的数据节点,然后mysql服务器恢复正常,一切正常。

但有一件事对我来说很奇怪,在我失去mysql服务器的一些查询后,当我使用cmd像show tables,我仍然可以得到像set中的33行(5.57秒)这样的返回信息,但没有表信息显示。

其他回答

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

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客户端像这样:

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

如果你在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。服务器重启

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

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

$ mysql db_name < source.sql

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

这是一个比较罕见的问题,但我看到过,如果有人复制了整个/var/lib/mysql目录,作为将他们的DB迁移到另一个服务器的一种方式。它不起作用的原因是数据库正在运行并使用日志文件。如果/var/log/mysql.中有日志,它有时会不起作用解决方案是复制/var/log/mysql文件。