我试图通过phpMyAdmin导入一个大的sql文件…但它一直显示错误
“MySql服务器已经消失”
怎么办呢?
如果你使用默认值运行,那么你有很多空间来优化你的mysql配置。
我建议的第一步是将max_allowed_packet增加到128M。
然后下载MySQL Tuning Primer脚本并运行它。它将为您的配置提供几个方面的建议,以获得更好的性能。
另外,还要在MySQL和PHP中调整超时值。
你要导入的文件有多大(文件大小),你能使用mysql命令行客户端而不是PHPMyAdmin导入文件吗?
如在这里所述:
MySQL服务器的两个最常见的原因(和修复)已经消失 (错误2006): 服务器超时并关闭连接。如何修复: 检查mysqld的my.cnf配置文件中的wait_timeout变量足够大。在Debian上:sudo nano /etc/mysql/my.cnf,设置wait_timeout = 600秒(你可以 当错误2006消失时调整/减少这个值),然后sudo /etc/init.d / mysql重启> < /代码。我没有检查,但是默认值 Wait_timeout可能在28800秒左右(8小时) 服务器丢弃错误或过大的数据包。如果mysqld得到一个太大或不正确的包,它会假设有什么东西已经出错 客户端出错并关闭连接。你可以增加 的值来限制数据包的最大大小 my.cnf文件中的Max_allowed_packet。在Debian上:sudo nano /etc/mysql/my.cnf,设置max_allowed_packet = 64M(你可以 当错误2006消失时调整/减少这个值),然后sudo /etc/init.d / mysql重启> < /代码。< / p > < /李>
服务器超时并关闭连接。如何修复:
检查mysqld的my.cnf配置文件中的wait_timeout变量足够大。在Debian上:sudo nano /etc/mysql/my.cnf,设置wait_timeout = 600秒(你可以 当错误2006消失时调整/减少这个值),然后sudo /etc/init.d / mysql重启> < /代码。我没有检查,但是默认值 Wait_timeout可能在28800秒左右(8小时) 服务器丢弃错误或过大的数据包。如果mysqld得到一个太大或不正确的包,它会假设有什么东西已经出错 客户端出错并关闭连接。你可以增加 的值来限制数据包的最大大小 my.cnf文件中的Max_allowed_packet。在Debian上:sudo nano /etc/mysql/my.cnf,设置max_allowed_packet = 64M(你可以 当错误2006消失时调整/减少这个值),然后sudo /etc/init.d / mysql重启> < /代码。< / p > < /李>
sudo nano /etc/mysql/my.cnf
wait_timeout = 600
sudo /etc/init.d / mysql重启> < /代码。我没有检查,但是默认值 Wait_timeout可能在28800秒左右(8小时) 服务器丢弃错误或过大的数据包。如果mysqld得到一个太大或不正确的包,它会假设有什么东西已经出错 客户端出错并关闭连接。你可以增加 的值来限制数据包的最大大小 my.cnf文件中的Max_allowed_packet。在Debian上:sudo nano /etc/mysql/my.cnf,设置max_allowed_packet = 64M(你可以 当错误2006消失时调整/减少这个值),然后sudo /etc/init.d / mysql重启> < /代码。< / p > < /李>
服务器丢弃错误或过大的数据包。如果mysqld得到一个太大或不正确的包,它会假设有什么东西已经出错 客户端出错并关闭连接。你可以增加 的值来限制数据包的最大大小 my.cnf文件中的Max_allowed_packet。在Debian上:sudo nano /etc/mysql/my.cnf,设置max_allowed_packet = 64M(你可以 当错误2006消失时调整/减少这个值),然后sudo /etc/init.d / mysql重启> < /代码。< / p > < /李>
max_allowed_packet = 64M
sudo /etc/init.d / mysql重启> < /代码。< / p > < /李>
编辑:
注意,MySQL选项文件没有它们的命令作为注释可用(例如在php.ini中)。所以你必须在my.cnf或my.ini中输入任何更改/调整,并将它们放在mysql/data目录或任何其他路径中,在适当的选项组下,如[client], [myslqd]等。例如:
my.cnf
my.ini
mysql/data
[client]
[myslqd]
[mysqld] wait_timeout = 600 max_allowed_packet = 64M
然后重新启动服务器。要得到它们的值,在mysql客户端中输入:
> select @@wait_timeout; > select @@max_allowed_packet;
发生这种情况的另一个原因是内存不足。检查/var/log/messages,确保你的my.cnf没有设置成导致mysqld分配比你的机器更多的内存。
您的mysqld进程实际上可以被内核杀死,然后由“safe_mysqld”进程重新启动,而您却没有意识到这一点。
使用top并在它运行时观察内存分配,看看您的净空是多少。
在更改my.cnf之前对其进行备份。
如果你在OS X上使用MAMP,你需要改变MySQL模板中的max_allowed_packet值。
max_allowed_packet
你可以在下面找到:文件>编辑模板> MySQL my.cnf
我有类似的错误,今天复制数据库(MySQL服务器已经离开…),但当我试图重新启动MySQL。服务器重启出错
ERROR! The server quit without updating PID ...
quit mysqld
然后就能解决误差问题了
mysql.server restart
对我来说,这个解决方案不可行,所以我执行了
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
如果要这样做,请确保从命令行显式地指定一个更大的数字。
当我导入16gb的SQL文件时,我有这个错误和其他相关的错误。对我来说,编辑my.ini并在[mysqld]部分中设置以下内容(基于几个不同的帖子):
max_allowed_packet = 110M innodb_buffer_pool_size=511M innodb_log_file_size=500M innodb_log_buffer_size = 800M net_read_timeout = 600 net_write_timeout = 600
如果你在Windows下运行,转到控制面板,服务,并查看MySQL的详细信息,你会看到my.ini在哪里。然后在编辑并保存my.ini后,重新启动mysql服务(或重新启动计算机)。
如果您正在使用HeidiSQL,您还可以使用它来设置其中的一些或全部。
如果你在XAMPP上工作,那么你可以修复MySQL服务器已经消失的问题。
修改以下变量值
max_allowed_packet = 64M innodb_lock_wait_timeout = 500
如果你的数据包括BLOB数据:
BLOB
请注意,从命令行导入数据似乎会阻塞在BLOB数据上,导致'MySQL server has gone away'错误。
为了避免这种情况,重新创建mysqldump,但是带有--hex-blob标志:
--hex-blob
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
这将写出数据文件与十六进制值,而不是二进制之间的其他文本。
PhpMyAdmin也有选项“转储十六进制符号的二进制列(例如,“abc”变成0x616263)”,这工作得很好。
GEOM
我用这个简短的/etc/mysql/my.cnf文件解决了我的问题:
[mysqld] wait_timeout = 600 max_allowed_packet = 100M
我正在做一些大型的计算,涉及到mysql连接停留很长时间和大量的数据。我正面临这个“Mysql走开的问题”。所以我试着优化查询,但这并没有帮助我,然后我增加了mysql变量限制,默认设置为较低的值。
对于任何适合你的限制,它应该是任何数字* 1024(字节)。您可以使用'Mysql -u username - p'命令登录到终端,并可以检查和更改这些变量限制。
如果需要很长时间才能失败,则放大wait_timeout变量。
wait_timeout
如果立即失败,则放大max_allowed_packet变量;如果它仍然不工作,确保命令是有效的SQL。我的书有未转义的引号,把一切都搞砸了。
此外,如果可行,可以考虑将单个SQL命令的插入数量限制为1000。您可以创建一个脚本,通过重新引入INSERT…每n个插入部分。
我得到一个类似的错误。要解决这个问题,只需打开my.ini文件,在第36行更改最大允许数据包大小的值。max_allowed_packet = 20M
在GoDaddy共享托管帐户上,调整PHP.ini等文件是很棘手的。然而,还有另一种方法,它非常适合我。(我刚刚成功上传了一个3.8Mb的.sql文本文件,包含3100行和145个cols。使用phpMyAdmin中的IMPORT命令,我得到了可怕的MySQL服务器已经消失了错误,没有进一步的信息。)
我发现马特·布彻的答案是正确的。和Matt一样,我也尝试过各种技巧,从将MySQL数据库导出成小块,到编写脚本将大的导入分解成小块。但以下是有效的方法:
(1) CPANEL—> FILES (group)—> BACKUP
(2a)在“部分备份”标题下 (2b)在“下载MySQL数据库备份” (2c)选择您的数据库并下载备份(这一步可选,但明智)
(3a)直接在2b的右边,在“恢复一个MySQL数据库备份”的标题下 (3b)从您的本地驱动器选择。sql导入文件 (3c)真正的幸福将属于你(很快....)我花了大约5秒
我可以使用这种方法导入单个表。我的数据库中没有其他任何东西受到影响——但这就是上面的步骤(2)的目的。
确保mysqld进程不会因为systemd这样的服务管理器而重新启动。
我在《流浪》中遇到过这个问题。配置调整没有帮助。原来这是系统杀死我的服务每次当它占用太多的内存。
当我通过Sequel Pro将.sql文件导入我的数据库时,我得到了和你一样的错误。
.sql
在将max_allowed_packet提升为512M后,错误仍然存在,所以我在命令行中运行导入:
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转储是两个zip文件,需要连接在一起,然后解压缩。我认为解压一开始就中断了,留下了一些奇怪的字符和编码。获得一个新的MySQL转储并正确地解压缩它对我来说很有效。
只是想在这里添加这个,以防其他人发现增加max_allowed_packet变量没有帮助。
任何关于数据包大小或超时的解决方案对我都没有任何影响。我需要禁用ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
我也有同样的问题
$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