我试图通过phpMyAdmin导入一个大的sql文件…但它一直显示错误

“MySql服务器已经消失”

怎么办呢?


当前回答

我更新了“max_allowed_packet”到1024M,但它仍然不能工作。结果发现我的部署脚本正在运行:

mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql

如果要这样做,请确保从命令行显式地指定一个更大的数字。

其他回答

确保mysqld进程不会因为systemd这样的服务管理器而重新启动。

我在《流浪》中遇到过这个问题。配置调整没有帮助。原来这是系统杀死我的服务每次当它占用太多的内存。

对我来说,这个解决方案不可行,所以我执行了

SET GLOBAL max_allowed_packet=1073741824;

在我的SQL客户端。

如果不能改变MYSql服务运行,你应该停止服务,并改变my.ini文件中的变量。

例如:

max_allowed_packet=20M

我更新了“max_allowed_packet”到1024M,但它仍然不能工作。结果发现我的部署脚本正在运行:

mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql

如果要这样做,请确保从命令行显式地指定一个更大的数字。

如果你在XAMPP上工作,那么你可以修复MySQL服务器已经消失的问题。

打开my.ini文件 my.ini的位置是(D:\xampp\mysql\bin\my.ini)

修改以下变量值

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500

如果增加max_allowed_packet没有帮助。

当我通过Sequel Pro将.sql文件导入我的数据库时,我得到了和你一样的错误。

在将max_allowed_packet提高到512M后,错误仍然存在,所以我在命令行中运行导入:

mysql --verbose -u root -p DatabaseName < MySQL.sql

它给出了以下错误:

ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled

我发现了一些有用的StackOverflow问题:

在从SQL转储恢复数据库时启用二进制模式 Mysql错误:ASCII '\0'当导入sql文件在linux服务器上

在我的情况下,我的.sql文件有点损坏。我们得到的MySQL转储是两个zip文件,需要连接在一起,然后解压缩。我认为解压一开始就中断了,留下了一些奇怪的字符和编码。获得一个新的MySQL转储并正确地解压缩它对我来说很有效。

只是想在这里添加这个,以防其他人发现增加max_allowed_packet变量没有帮助。