导入大型sql文件时,MySQL Server已经消失了

Fra*_*123 244 mysql phpmyadmin

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

'MySql服务器已经消失'

该怎么办?

GBD*_*GBD 363

如前所述这里:

MySQL服务器的两个最常见的原因(和修复)已经消失(错误2006):

服务器超时并关闭连接.怎么修:

  1. 检查mysqld的my.cnf配置文件中的wait_timeout变量是否足够大.在Debian上:sudo nano /etc/mysql/my.cnf设置wait_timeout = 600秒数(当错误2006消失时你可以调整/减小这个值),然后sudo /etc/init.d/mysql restart.我没有检查,但wait_timeout的默认值可能是28800秒(8小时)左右.

  2. 服务器丢弃了不正确或过大的数据包.如果mysqld获取的数据包太大或不正确,则会假定客户端出现问题并关闭连接.您可以通过增加my.cnf文件中max_allowed_pa​​cket的值来增加最大数据包大小限制.在Debian上:sudo nano /etc/mysql/my.cnf,设置max_allowed_packet = 64M(当错误2006消失时你可以调整/减小这个值),然后sudo /etc/init.d/mysql restart.

编辑: 请注意,MySQL选项文件没有其命令可用作注释(例如,在php.ini中).因此,您必须键入任何更改/调整my.cnfmy.ini将它们放在mysql/data目录或任何其他路径中,在适当的选项组下,例如[client],[myslqd]...等,例如:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
然后重新启动服务器.要获取它们的值,请键入控制台:
select @@wait_timeout;
select @@max_allowed_packet;

  • 在我的例子中,它是**max_allowed_pa​​cket**变量.它被设置为1 MB的默认值(你可以通过运行`SHOW VARIABLES`MySQL查询来看到这一点),我导入的文件有一些非常大的记录.我打开了**my.ini**文件(我正在运行Windows)并将值设置为:`max_allowed_pa​​cket = 64M`,重新启动MySQL并重新运行导入. (70认同)
  • 在Windows(使用Xampp)的情况下,它是my.ini文件和innodb_lock_wait_timeout (4认同)
  • 我找不到`wait_timeout`行 (2认同)
  • 请注意,my.ini 文件包含 2 个“max_allowed_pa​​cket”值。为了确定起见,请同时更改两者。我犯了一个错误,只更改了“max_allowed_pa​​cket”的第二个值,而不是寻找其他值。这让我足足承受了 30 分钟的压力。 (2认同)

sal*_*nga 91

对我来说,这个解决方案没有成功,所以我执行了

SET GLOBAL max_allowed_packet=1073741824;
Run Code Online (Sandbox Code Playgroud)

在我的SQL客户端中.

如果无法在运行MYSql服务时更改此设置,则应停止该服务并更改"my.ini"文件中的变量.

例如:

max_allowed_packet=20M
Run Code Online (Sandbox Code Playgroud)

  • @atwixtor no,在服务器重启之前设置这样的变量.然后将它们重置为默认值. (2认同)
  • 我建议你补充说你可以用`SHOW variables LIKE'max_allowed_pa​​cket'来检查当前的大小 (2认同)

Dae*_*aos 19

如果您使用默认值运行,那么您有很大的空间来优化您的mysql配置.

我建议的第一步是将max_allowed_pa​​cket增加到128M.

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

还要考虑在MySQL和PHP中调整超时值.

您要导入的文件有多大(文件大小),是否可以使用mysql命令行客户端而不是PHPMyAdmin导入文件?


小智 18

如果您正在使用XAMPP,那么您可以修复MySQL服务器已经消失了以下更改的问题.

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

更改以下变量值

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Run Code Online (Sandbox Code Playgroud)


小智 8

如果在OS X上使用MAMP,则需要更改max_allowed_packetMySQL模板中的值.

  1. 您可以在以下位置找到它:文件>编辑模板> MySQL my.cnf

  2. 然后只需搜索max_allowed_packet,更改值并保存.

希望这有助于某人.


小智 6

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

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
Run Code Online (Sandbox Code Playgroud)


小智 5

这可能发生的另一个原因是内存不足.检查/ var/log/messages并确保my.cnf未设置为导致mysqld分配的内存超过机器的内存.

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

使用top并在运行时观察内存分配,以查看您的余量是多少.

在更改之前备份my.cnf.


小智 5

我在16 GB 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
Run Code Online (Sandbox Code Playgroud)

如果您在Windows下运行,请转到控制面板,服务,查看MySQL的详细信息,您将看到my.ini的位置.然后在编辑并保存my.ini之后,重新启动mysql服务(或重新启动计算机).

如果您使用的是HeidiSQL,您还可以使用它设置部分或全部.