我试图通过phpMyAdmin导入一个大的sql文件…但它一直显示错误
“MySql服务器已经消失”
怎么办呢?
我试图通过phpMyAdmin导入一个大的sql文件…但它一直显示错误
“MySql服务器已经消失”
怎么办呢?
当前回答
对我来说,这个解决方案不可行,所以我执行了
SET GLOBAL max_allowed_packet=1073741824;
在我的SQL客户端。
如果不能改变MYSql服务运行,你应该停止服务,并改变my.ini文件中的变量。
例如:
max_allowed_packet=20M
其他回答
如果你在OS X上使用MAMP,你需要改变MySQL模板中的max_allowed_packet值。
你可以在文件>编辑模板> MySQL my.cnf 然后只需搜索max_allowed_packet,更改值和 保存。
我更新了“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
如果您的数据包括BLOB数据:
请注意,从命令行导入数据似乎会阻塞在BLOB数据上,导致'MySQL server has gone away'错误。
为了避免这种情况,重新创建mysqldump,但是使用——hex-blob标记:
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
这将写出数据文件与十六进制值,而不是二进制之间的其他文本。
PhpMyAdmin也有选项“转储十六进制符号的二进制列(例如,“abc”变成0x616263)”,这工作得很好。
请注意,存在一个长期存在的错误(截至2015年12月),这意味着GEOM列不能转换: 备份一个表几何列使用mysqldump? 所以使用像PhpMyAdmin这样的程序似乎是唯一的解决方案(上面提到的选项可以正确地转换GEOM列)。
发生这种情况的另一个原因是内存不足。检查/var/log/messages,确保你的my.cnf没有设置成导致mysqld分配比你的机器更多的内存。
您的mysqld进程实际上可以被内核杀死,然后由“safe_mysqld”进程重新启动,而您却没有意识到这一点。
使用top并在它运行时观察内存分配,看看您的净空是多少。
在更改my.cnf之前对其进行备份。