在导入大型sql文件时,MySQL服务器已消失

在导入大型sql文件时,MySQL服务器已消失,mysql,phpmyadmin,Mysql,Phpmyadmin,我试图通过phpMyAdmin导入一个大型sql文件…但它一直显示错误 > select @@wait_timeout; > select @@max_allowed_packet; “MySql服务器已经消失” > select @@wait_timeout; > select @@max_allowed_packet; 怎么办?如果您使用默认值运行,那么您有很大的空间来优化mysql配置 > select @@wait_timeout; > selec

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

> select @@wait_timeout;
> select @@max_allowed_packet;
“MySql服务器已经消失”

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

怎么办?

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

> select @@wait_timeout;
> select @@max_allowed_packet;
我建议的第一步是将max_allowed_数据包增加到128M

> select @@wait_timeout;
> select @@max_allowed_packet;
然后下载并运行。它将为配置的几个方面提供建议,以提高性能

> select @@wait_timeout;
> select @@max_allowed_packet;
另外,还要考虑在MySQL和PHP中调整超时值

> select @@wait_timeout;
> select @@max_allowed_packet;
您正在导入的文件有多大(文件大小),您是否能够使用mysql命令行客户端而不是PHPMyAdmin导入该文件?

如上所述:

> select @@wait_timeout;
> select @@max_allowed_packet;
MySQL服务器最常见的两个原因(和修复)已经消失 (错误2006)是:

> select @@wait_timeout;
> select @@max_allowed_packet;
服务器超时并关闭了连接。如何修复:

> select @@wait_timeout;
> select @@max_allowed_packet;
  • 检查mysqld的my.cnf配置文件中的wait_timeout变量是否足够大。关于Debian:
    sudo nano
    /etc/mysql/my.cnf
    ,设置
    wait\u timeout=600
    秒(您可以 当错误2006消失时调整/减小该值),然后
    sudo
    /etc/init.d/mysql重启
    。我没有检查,但默认值为 等待超时可能约为28800秒(8小时)

  • > select @@wait_timeout;
    > select @@max_allowed_packet;
    
  • 服务器丢弃了不正确或过大的数据包。如果mysqld得到一个太大或不正确的数据包,那么它会假设有什么东西 客户端出现问题并关闭连接。你可以增加 通过增加 my.cnf文件中允许的最大数据包数。关于Debian:
    sudo nano
    /etc/mysql/my.cnf
    ,设置
    max\u allowed\u packet=64M
    (您可以 当错误2006消失时调整/减小该值),然后
    sudo
    /etc/init.d/mysql重启

  • > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    编辑:

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    请注意,MySQL选项文件的命令并没有作为注释提供(例如在php.ini中)。因此,您必须在
    my.cnf
    my.ini
    中键入任何更改/调整,并将它们放置在
    mysql/data
    目录或任何其他路径中,位于适当的选项组下,例如
    [client]
    [myslqd]
    等。例如:

    [mysqld]
    wait_timeout = 600
    max_allowed_packet = 64M
    
    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    然后重新启动服务器。要获取它们的值,请键入mysql客户端:

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

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

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    您的mysqld进程实际上可以被内核杀死,然后由“safe_mysqld”进程在您没有意识到的情况下重新启动

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    使用top并在运行时观察内存分配,以查看您的净空

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

    更改my.cnf之前,请先备份它。

    如果您在OS X上使用MAMP,则需要更改MySQL模板中的
    max\u allowed\u packet

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
  • 您可以在以下位置找到它:文件>编辑模板>MySQL my.cnf

  • > select @@wait_timeout;
    > select @@max_allowed_packet;
    
  • 然后只需搜索
    max\u allowed\u packet
    ,更改值并 保存

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

    今天我在复制数据库时遇到了类似的错误(MySQL服务器已经消失了…),但当我尝试重新启动MySQL.server restart时,我遇到了错误

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    ERROR! The server quit without updating PID ...
    
    我就是这样解决的: 我打开了应用程序/实用程序/并运行了活动监视器

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
     quit mysqld
    
    然后就可以用

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    mysql.server restart
    

    对我来说,这个解决方案不起作用,所以我执行了

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    SET GLOBAL max_allowed_packet=1073741824;
    
    在我的SQL客户机中

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    如果在MYSql服务运行时无法更改,则应停止该服务并更改“my.ini”文件中的变量

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    例如:

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    max_allowed_packet=20M
    
    我将“max_allowed_Package”更新为1024M,但它仍然不起作用。原来我的部署脚本正在运行:

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
    
    mysql--max\u allowed\u packet=512M--database=mydb-u root<.\db\db.sql
    

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

    我在16 GB SQL文件中导入时出现了此错误和其他相关错误。对于我来说,编辑my.ini并在[mysqld]部分设置以下内容(基于多篇不同的帖子):

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    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服务(或重新启动计算机)

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

    如果您使用的是HeidiSQL,您也可以使用它来设置部分或全部内容。

    如果您使用的是XAMPP,那么您可以通过以下更改来修复MySQL服务器消失的问题。

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    打开my.ini文件 my.ini位置是(D:\xampp\mysql\bin\my.ini)

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    更改以下变量值

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    max_allowed_packet = 64M
    innodb_lock_wait_timeout = 500
    

    如果您的数据包含
    BLOB
    数据:

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    请注意,从命令行导入数据似乎会阻塞BLOB数据,从而导致“MySQL服务器已消失”错误

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    要避免这种情况,请使用
    --hex blob
    标志重新创建mysqldump:

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

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    它将用十六进制值而不是二进制值以及其他文本写出数据文件

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    PhpMyAdmin还有一个选项“以十六进制表示法转储二进制列(例如,“abc”变为0x616263)”,该选项运行良好

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    请注意,存在一个长期存在的错误(截至2015年12月),这意味着
    GEOM
    列不会被转换:
    因此,使用PhpMyAdmin之类的程序似乎是唯一的解决办法(上面提到的选项可以正确转换GEOM列)。

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

    > select @@wait_timeout;
    > select @@max_allowed_packet;
    
    [mysqld]
    wait_timeout = 600
    max_allowed_packet = 100M
    

    我正在做一些大型计算,其中涉及mysql连接,以保持长时间和大量数据。我正面临着这个“Mysql离开问题”。因此,我尝试不优化查询,但这对我没有帮助,然后我增加了mysql变量限制,默认情况下设置为较低的值

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