当我试图获取一个大的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
当您创建的SCHEMA的COLLATION与转储中使用的不同时,也会出现此错误消息。因此,如果转储包含
CREATE TABLE `mytab` (
..
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
你也应该在SCHEMA排序中反映这一点:
CREATE SCHEMA myschema COLLATE utf8_unicode_ci;
我一直在模式中使用utf8mb4_general_ci,因为我的脚本来自一个新的V8安装,现在在旧5.7上加载一个DB崩溃了,几乎把我逼疯了。
所以,也许这能帮你节省一些令人沮丧的时间……: -)
(MacOS 10.3, mysql 5.7)
当我使用Mysql集群时,我遇到了这个错误,我不知道这个问题是否来自集群的使用。由于误差是完全相同的,所以在这里给出我的解。
得到这个错误是因为数据节点突然崩溃。但是当节点崩溃时,你仍然可以使用cmd得到正确的结果:
ndb_mgm -e 'ALL REPORT MEMORYUSAGE'
mysqld也可以正常工作。所以一开始,我不明白是怎么回事。大约5分钟后,ndb_mgm结果显示没有数据节点工作。然后我意识到问题所在。因此,尝试重新启动所有的数据节点,然后mysql服务器恢复正常,一切正常。
但有一件事对我来说很奇怪,在我失去mysql服务器的一些查询后,当我使用cmd像show tables,我仍然可以得到像set中的33行(5.57秒)这样的返回信息,但没有表信息显示。
您还可以以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';
您也可以使用命令行,但这可能需要更新启动/停止脚本,这些脚本可能无法在系统更新和补丁中保存。
根据要求,我在这里添加了我自己的答案。很高兴看到它工作!