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

“MySql服务器已经消失”

怎么办呢?


当前回答

如果你在OS X上使用MAMP,你需要改变MySQL模板中的max_allowed_packet值。

你可以在文件>编辑模板> MySQL my.cnf 然后只需搜索max_allowed_packet,更改值和 保存。

其他回答

发生这种情况的另一个原因是内存不足。检查/var/log/messages,确保你的my.cnf没有设置成导致mysqld分配比你的机器更多的内存。

您的mysqld进程实际上可以被内核杀死,然后由“safe_mysqld”进程重新启动,而您却没有意识到这一点。

使用top并在它运行时观察内存分配,看看您的净空是多少。

在更改my.cnf之前对其进行备份。

GoDaddy共享主机

在GoDaddy共享托管帐户上,调整PHP.ini等文件是很棘手的。然而,还有另一种方法,它非常适合我。(我刚刚成功上传了一个3.8Mb的.sql文本文件,包含3100行和145个cols。使用导入命令在phpMyAdmin,我得到了可怕的MySQL服务器已经离开错误,没有进一步的信息。)

我发现马特·布彻的答案是正确的。和Matt一样,我也尝试过各种技巧,从将MySQL数据库导出成小块,到编写脚本将大的导入分解成小块。但以下是有效的方法:

(1) CPANEL—> FILES (group)—> BACKUP

(2a)在“部分备份”标题下… (2b)“下载MySQL数据库备份” (2c)选择你的数据库并下载备份(这一步可选,但明智)

(3a)在2b的右边,在“恢复MySQL数据库备份”的标题下 从您的本地驱动器中选择.SQL导入文件 (3c)真正的幸福将属于你(很快....)我只用了5秒钟

我可以使用这种方法导入单个表。我的数据库中没有其他任何东西受到影响——但这就是上面的步骤(2)的目的。

注: a.如果您不确定如何创建. sql导入文件,请使用phpMyAdmin导出表并修改文件结构。

来源: 马特·布彻2010文章

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

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

我也有同样的问题

$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);

在phpmyadmin的\xampp\mysql\bin\my.ini文件中,我们只得到

[mysqldump]
max_allowed_packet=110M

这只是mysqldump -u root -p dbname。我通过替换上面的代码来解决我的问题

max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M

如下所述:

Two most common reasons (and fixes) for the MySQL server has gone away (error 2006) are: Server timed out and closed the connection. How to fix: check that wait_timeout variable in your mysqld’s my.cnf configuration file is large enough. On Debian: sudo nano /etc/mysql/my.cnf, set wait_timeout = 600 seconds (you can tweak/decrease this value when error 2006 is gone), then sudo /etc/init.d/mysql restart. I didn't check, but the default value for wait_timeout might be around 28800 seconds (8 hours). Server dropped an incorrect or too large packet. If mysqld gets a packet that is too large or incorrect, it assumes that something has gone wrong with the client and closes the connection. You can increase the maximal packet size limit by increasing the value of max_allowed_packet in my.cnf file. On Debian: sudo nano /etc/mysql/my.cnf, set max_allowed_packet = 64M (you can tweak/decrease this value when error 2006 is gone), then sudo /etc/init.d/mysql restart.

编辑:

注意,MySQL选项文件没有它们的命令作为注释可用(例如在php.ini中)。所以你必须在my.cnf或my.ini中输入任何更改/调整,并将它们放在mysql/data目录或任何其他路径下,在适当的选项组下,如[client], [myslqd]等。例如:

[mysqld]
wait_timeout = 600
max_allowed_packet = 64M

然后重新启动服务器。要得到它们的值,在mysql客户端中输入:

> select @@wait_timeout;
> select @@max_allowed_packet;