当我尝试导入 MYSQL 数据库时,出现以下错误:
Error Code: 2013 - Lost connection to MySQL server during queryQuery:
Error Code: 2006 - MySQL server has gone away
有人可以让我知道出了什么问题吗?
当我尝试导入 MYSQL 数据库时,出现以下错误:
Error Code: 2013 - Lost connection to MySQL server during queryQuery:
Error Code: 2006 - MySQL server has gone away
有人可以让我知道出了什么问题吗?
调查显示许多解决方案正确地讨论了在 my.cnf 中为 mysql 设置 max_allowed_packet 和 wait_timeout;小附录,在 mac osx 上默认安装的 mysql 似乎不包含此文件。您可能首先需要在 /etc/my.cnf 中创建它(如果您使用 mysql 的默认安装而不是 mamp 堆栈或类似的,这只是一个问题)
/etc/my.cnf 的内容在下面为我纠正了这个问题:
[mysqld]
max_allowed_packet= 64M
wait_timeout= 6000
如果您的 INSERT 查询是包含多行的太大单行语句,则经常发生这种情况。
尝试以下与 2006 错误相关的修复:
服务器超时并关闭连接。如何修复:检查 mysqld 的 my.cnf 配置文件中的 wait_timeout 变量是否足够大。
服务器丢弃了不正确或太大的数据包。如果 mysqld 收到一个太大或不正确的数据包,它会假定客户端出现问题并关闭连接。您可以通过增加 my.cnf 文件中的 max_allowed_packet 的值来增加最大数据包大小限制。
尝试重启mysql服务器。服务器可能无法正常工作,但 sql 通知程序也显示正在运行。
my.cnf
这是编辑文件的替代方法。您可以通过登录 MySQL 服务器来设置 MySQL 全局变量的值。
您可以使用以下命令检查所有 MySQL 全局变量及其值的列表:
$> mysqladmin variables -u YourMysqlUsername -p
您还可以通过首先登录 MySQL 服务器来检查这些变量值:
$> mysql -u YourMysqlUsername -p
mysql> SHOW VARIABLES;
要检查特定的变量值:
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
要解决MySQL Server Gone Away错误,您需要增加
max_allowed_packet
变量的值。
mysql> SET GLOBAL max_allowed_packet=1072731894;
mysql> quit
现在,当您再次登录 MySQL 并检查该max_allowed_packet
值时,您应该会看到更新后的值。
$> mysql -u YourMysqlUsername -p
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+------------+
| Variable_name | Value |
+--------------------+------------+
| max_allowed_packet | 1072731136 |
+--------------------+------------+
1 row in set (0.00 sec)
这个问题发生在你身上的原因有很多,在这里你可以找到所有可能的原因,我个人一直在努力解决数据包的大小问题,但我已经更新了 my.ini 文件,但在此之前,我我检查了给我 1048576B = 1MB 的 max_allowed_packet 变量,我已经更新到 5MB。显示变量,其中 variable_name like '%packet%'
选择 1048576 / 1024 / 1024
选择 5242880 / 1024 / 1024
显示你的 mySql 变量
显示像“max%”这样的变量
设置全局 max_allowed_packet={PacketRANGE}; // 像这样 10485760;
显示全局变量,如“max_all%”;
在这里享受你的编码
在 MySQL 5.7 中,这个错误可能是由一个太大的通信包产生的:
当 MySQL 客户端或 mysqld 服务器接收到大于 max_allowed_packet 字节的数据包时,它会发出 ER_NET_PACKET_TOO_LARGE 错误并关闭连接。对于某些客户端,如果通信数据包太大,您可能还会在查询错误期间丢失与 MySQL 服务器的连接。
MySQL 中的数据包是:
通信包是发送到 MySQL 服务器的单个 SQL 语句,发送到客户端的单行,或者从主复制服务器发送到从服务器的二进制日志事件。
您可以在此处找到文档:DOC
您应该尝试将max_allowed_packet设置为更大的值(默认值为 4MB)以解决您的 SQL 脚本是否大于此大小。您可以在选项文件中设置此值,这样您就不必每次都进行设置。
在 Microsoft Windows Vista 和更高版本上,您可以将max_allowed_packet设置到文件
%PROGRAMDATA%\MySQL\MySQL Server 5.7\my.ini
或
%PROGRAMDATA%\MySQL\MySQL Server 5.7\my.cnf
其中 PROGRAMDATA = C:\ProgramData
更多信息(也适用于其他 SO)这里
当我尝试在表的末尾添加一列时,我发现在使用 MySQL Workbench 8.0 的 My SQL 中经常发生这种情况。此外,该表随后被锁定且无法使用。试图放下桌子直到一两天后才起作用。但是,我发现在现有列之间插入新列时没有任何问题......
正如都铎在他的反应中提到的那样:
The most common reason for the MySQL server has gone away error is that the
server timed out and closed the connection
您需要更改最大执行时间和大小,您可以使用以下命令来执行此操作:
SET GLOBAL wait_timeout = 6000;
SET GLOBAL max_allowed_packet= 64M;
它们是 sql 命令,因此您可以像普通命令一样执行它们。
有时会发生这种情况,您的服务器上的那些人处于脱机状态,而您使用的是在更改密码之前创建的 MySQL 连接。这就是为什么您应该在更改服务器密码后创建一个新的连接并使用 SQL 练习。
如果您的 INSERT 查询是包含多行的太大单行语句。