首页 文章

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

提问于
浏览
222

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

'MySql服务器已经消失'

该怎么办?

17 回答

  • 2

    如上所述here

    MySQL服务器的两个最常见的原因(和修复)已经消失(错误2006):服务器超时并关闭连接 . 如何修复:检查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小时)左右 . 服务器丢弃了不正确或过大的数据包 . 如果mysqld获取的数据包太大或不正确,则会假定客户端出现问题并关闭连接 . 您可以通过增加my.cnf文件中max_allowed_packet的值来增加最大数据包大小限制 . 在Debian:sudo nano /etc/mysql/my.cnf,设置max_allowed_packet = 64M(当错误2006消失时你可以调整/减小这个值),然后sudo /etc/init.d/mysql restart .

    Edit: 请注意,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;

  • 5

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

    SET GLOBAL max_allowed_packet=1073741824;
    

    在我的SQL客户端中 .

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

    例如:

    max_allowed_packet=20M
    
  • 0

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

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

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

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

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

  • -1

    If you are working on XAMPP then you can fix the MySQL Server has gone away issue with following changes..

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

    更改以下变量值

    max_allowed_packet = 64M
    innodb_lock_wait_timeout = 500
    
  • 1

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

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

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

    希望这有助于某人 .

  • 7

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

    [mysqld]
    wait_timeout = 600
    max_allowed_packet = 100M
    
  • 0

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

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

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

    在更改之前备份my.cnf .

  • 1

    当我以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
    

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

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

  • 0

    If your data includes BLOB data:

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

    要避免这种情况,请使用 --hex-blob 标志重新创建mysqldump:

    http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob

    这将使用十六进制值而不是二进制文本写出数据文件 .

    PhpMyAdmin也有选项“以十六进制表示法转储二进制列(例如,”abc“变为0x616263)”这很好用 .

    请注意,存在一个长期存在的错误(截至2015年12月),这意味着 GEOM 列未转换:Back up a table with a GEOMETRY column using mysqldump?所以使用像PhpMyAdmin这样的程序似乎是唯一的解决方法(上面提到的选项可以正确转换GEOM列) .

  • 82

    我将“max_allowed_packet”更新为1024M,但它仍然无效 . 事实证明我的部署脚本正在运行:

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

    如果你这样做,请务必从命令行中明确指定一个更大的数字 .

  • 0

    如果失败需要很长时间,那么放大 wait_timeout 变量 .

    如果它立即失败,放大 max_allowed_packet 变量;它仍然无法正常工作,请确保该命令是有效的SQL . 我有未转义的引号,搞砸了一切 .

    此外,如果可行,请考虑将单个SQL命令的插入数限制为1000.您可以创建一个脚本,通过每n次插入重新引入INSERT ...部分,从单个语句中创建多个语句 .

  • 13

    我得到了一个类似的错误...解决这个问题只需打开my.ini文件 . 在第36行更改最大允许数据包大小的值,即 . max_allowed_packet = 20M

  • 17

    重复数据库(MySQL服务器已经消失......)今天我有类似的错误,但是当我试图重启mysql.server时我得到了错误

    ERROR! The server quit without updating PID ...
    

    这就是我解决它的方法:我打开了Applications / Utilities /并运行了Activity Monitor

    quit mysqld
    

    然后能够解决错误问题

    mysql.server restart
    
  • 5

    我正在做一些大型计算,涉及mysql连接,以保持长时间和繁重的数据 . 我正面对这个“Mysql go away issue” . 所以我尝试优化查询,但这没有帮助我然后我增加了mysql变量限制,默认设置为较低的值 .

    wait_timeout max_allowed_packet

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

  • 6

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

    我在带有centos 7的流浪汉中遇到了这个问题 . 配置调整没有帮助 . 原来它是systemd,它每次占用太多内存时都会杀死mysqld服务 .

  • 1

    如果增加max_allowed_packet没有帮助 .

    我通过Sequel Pro将 .sql 文件导入我的数据库时遇到了同样的错误 .

    max_allowed_packet 升级到 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 变量没有帮助 .

  • 330

    For GoDaddy共享主机

    在GoDaddy共享主机帐户上,调整PHP.ini等文件很棘手 . 然而,还有另一种方式,它对我来说非常有效 . (我刚刚成功上传了一个3.8Mb的.sql文本文件,包含3100行和145列 . 使用phpMyAdmin中的IMPORT命令,我得到了可怕的MySQL服务器已经消失了,没有进一步的信息 . )

    我发现Matt Butcher有正确的答案 . 和Matt一样,我尝试过各种各样的技巧,从一口大小的块中导出MySQL数据库,再到编写将大量导入到较小导入的脚本 . 但这是有效的:

    (1)CPANEL --->文件(组)--->备份

    (2a)在"Partial Backups" Headers 下......
    (2b)根据"Download a MySQL Database Backup"
    (2c)选择您的数据库并下载备份(此步骤是可选的,但明智的)

    (3a)直接在2b的右边, Headers 为"Restore a MySQL Database Backup"
    (3b)从本地驱动器中选择.SQL导入文件
    (3c)真正的幸福将是你的(不久......)我花了大约5秒钟

    我能够使用此方法导入单个表 . 我的数据库中没有其他任何东西受到影响 - 但这就是上面的步骤(2)旨在防范的 .

    笔记:
    一个 . 如果您不确定如何创建.SQL导入文件,请使用phpMyAdmin导出表并修改该文件结构 .

    消息来源:Matt Butcher 2010 Article

相关问题