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

“MySql服务器已经消失”

怎么办呢?


当前回答

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文章

其他回答

如果你使用默认值运行,那么你有很多空间来优化你的mysql配置。

我建议的第一步是将max_allowed_packet增加到128M。

然后下载MySQL Tuning Primer脚本并运行它。它将为您的配置提供几个方面的建议,以获得更好的性能。

另外,还要在MySQL和PHP中调整超时值。

你要导入的文件有多大(文件大小),你能使用mysql命令行客户端而不是PHPMyAdmin导入文件吗?

我正在做一些大型的计算,涉及到mysql连接停留很长时间和大量的数据。我正面临这个“Mysql走开的问题”。所以我试着优化查询,但这并没有帮助我,然后我增加了mysql变量限制,默认设置为较低的值。

wait_timeout max_allowed_packet

对于任何适合你的限制,它应该是任何数字* 1024(字节)。您可以使用'mysql -u username - p'命令登录到终端,并可以检查和更改这些变量限制。

如下所述:

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;

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

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

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

我用这个简短的/etc/mysql/my.cnf文件解决了我的问题:

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M