首页 文章

MySQL错误2006:mysql服务器已经消失

提问于
浏览
193

我在办公室运行服务器来处理一些文件并将结果报告给远程MySQL服务器 .

文件处理需要一些时间,并且进程在中途死亡,并出现以下错误:

2006, MySQL server has gone away

我听说过MySQL的设置, wait_timeout ,但是我需要在办公室或远程MySQL服务器的服务器上进行更改吗?

24 回答

  • 4

    检查连接是否更容易,并在需要时重新 Build 连接 .

    有关信息,请参见PHP:mysqli_ping .

  • 15

    我've encountered this a number of times and I'通常发现答案是max_allowed_packet的默认设置非常低 .

    将它在 /etc/my.cnf (在 [mysqld] 之下)提升到8或16M通常会修复它 . (MySql 5.7中的默认值为 4194304 ,即4MB . )

    [mysqld]
    max_allowed_packet=16M
    

    注意:如果该行不存在,只需创建该行

    注意:这可以在服务器上运行时设置 .

    使用 set global max_allowed_packet=104857600 . 这将其设置为100MB .

  • 0

    我有同样的问题,但在 [mysqld] 下的 my.ini/my.cnf 文件中更改 max_allowed_packet 就成了伎俩 .

    添加一行

    max_allowed_packet = 500M

    现在 restart the MySQL service 一旦你完成了 .

  • 9

    我在MySQL命令行中使用了以下命令来恢复大小超过7GB的MySQL数据库,并且它可以工作 .

    set global max_allowed_packet=268435456;
    
  • 10

    错误:2006(CR_SERVER_GONE_ERROR

    消息:MySQL服务器已经消失

    通常,您可以重试连接,然后再次执行查询以解决此问题 - 在完全放弃之前尝试3-4次 .

    我假设您正在使用PDO . 如果是这样,那么您将捕获PDO异常,递增计数器,然后如果计数器低于阈值则再次尝试 .

    如果您有一个导致超时的查询,您可以通过执行以下命令来设置此变量:

    SET @@GLOBAL.wait_timeout=300;
    SET @@LOCAL.wait_timeout=300;  -- OR current session only
    

    其中300是您认为查询可以占用的最长时间的秒数 .

    Further information on how to deal with Mysql connection issues.

    编辑:您可能还想使用的其他两个设置是 net_write_timeoutnet_read_timeout .

  • 27

    在MAMP(非专业版)中我添加了

    --max_allowed_packet=268435456
    

    ...\MAMP\bin\startMysql.sh

    积分和更多细节here

  • 2

    由于wait_timeout到期,会发生此错误 .

    只需转到mysql服务器检查其wait_timeout:

    mysql> SHOW VARIABLES LIKE'wait_timeout'mysql> set global wait_timeout = 600#10分钟或最长等待时间你需要

    http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html

  • -5

    我在DigitalOcean Ubuntu服务器上遇到了同样的错误 .

    我尝试更改max_allowed_packet和wait_timeout设置,但都没有修复它 .

    事实证明我的服务器没有内存 . 我添加了一个1GB swap file,这解决了我的问题 .

    free -h 检查你的记忆,看看's what'是否导致它 .

  • 4

    在Windows上,那些使用xampp的人应该使用这个路径xampp / mysql / bin / my.ini并将max_allowed_packet(在[mysqld]部分下)更改为你选择的大小 . 例如

    max_allowed_packet=8M
    

    再次在php.ini(xampp / php / php.ini)上更改upload_max_filesize的选择大小 . 例如

    upload_max_filesize=8M
    

    在我发现这个问题之前,让我头疼了一段时间 . 希望能帮助到你 .

  • 8

    这对我来说是RAM问题 .

    即使在具有12个CPU内核和32 GB RAM的服务器上,我也遇到了同样的问题 . 我研究了更多,并试图释放RAM . 这是我在Ubuntu 14.04上用来释放RAM的命令:

    sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
    

    而且,它修复了一切 . 我把它设置在cron下每小时运行一次 .

    crontab -e
    
    0 * * * * bash /root/ram.sh;
    

    并且,您可以使用此命令检查可用的可用RAM量:

    free -h
    

    而且,你会得到这样的东西:

    total       used       free     shared    buffers     cached
    Mem:           31G        12G        18G        59M       1.9G       973M
    -/+ buffers/cache:       9.9G        21G
    Swap:         8.0G       368M       7.6G
    
  • 4

    对于Vagrant Box,请确保为盒子分配足够的内存

    config.vm.provider "virtualbox" do |vb|
      vb.memory = "4096"
    end
    
  • 0

    在我的例子中,它是 open_files_limit 变量的低值,它阻止了mysqld对数据文件的访问 .

    我查了一下:

    mysql> SHOW VARIABLES LIKE 'open%';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | open_files_limit | 1185  |
    +------------------+-------+
    1 row in set (0.00 sec)
    

    在我将变量更改为大值后,我们的服务器再次活动:

    [mysqld]
    open_files_limit = 100000
    
  • 2

    不太可能的情况是客户端和服务器之间有防火墙强制TCP重置为连接 .

    我遇到了这个问题,我发现我们的公司F5防火墙配置为终止闲置超过5分钟的非活动会话 .

    再次,这是不太可能的情况 .

  • 6

    如果您正在使用64位WAMPSERVER,请搜索 max_allowed_packet 的多次出现,因为WAMP使用[wampmysqld64]下设置的值而不是[mysqldump]下设置的值,这对我来说是问题,我正在更新错误的值 . 将其设置为max_allowed_packet = 64M .

    希望这有助于其他Wampserver用户 .

  • 29

    这通常表示 MySQL server 连接问题或超时 . 通常可以通过更改 my.cnf 或类似的 wait_timeoutmax_allowed_packet 来解决 .

    我会建议这些值:

    wait_timeout = 28800

    max_allowed_packet = 8M

  • 2

    my.ini/my.cnf 中取消注释以下的ligne,这会将您的大文件拆分为较小的部分

    # binary logging format - mixed recommended
    # binlog_format=mixed
    

    # binary logging format - mixed recommended
    binlog_format=mixed
    
  • 316

    我找到了解决方案“#2006 - MySQL服务器已经消失”这个错误 . 解决方案就是你必须检查两个文件

    • config.inc.php

    • config.sample.inc.php

    Windows中这些文件的路径是

    C:\wamp64\apps\phpmyadmin4.6.4
    

    在这两个文件中的值是这样的:

    $cfg['Servers'][$i]['host']must be 'localhost' .
    

    在我的情况下它是:

    $cfg['Servers'][$i]['host'] = '127.0.0.1';
    

    将其更改为:

    "$cfg['Servers'][$i]['host']" = 'localhost';
    

    确保两者:

    • config.inc.php

    • config.sample.inc.php文件必须是'localhost' .

    最后一集:

    $cfg['Servers'][$i]['AllowNoPassword'] = true;
    

    然后重启Wampserver .


    更改phpmyadmin用户名和密码

    您可以通过config.inc.php文件直接更改phpmyadmin的用户名和密码

    这两行

    $cfg['Servers'][$i]['user'] = 'root';
    $cfg['Servers'][$i]['password'] = '';
    

    在这里,您可以提供新的用户名和密码 . 更改后保存文件并重新启动WAMP服务器 .

  • 3

    我在Ubuntu桌面上的不同MySQL客户端软件中收到了错误2006消息 . 事实证明我的JDBC驱动程序版本太旧了 .

  • 15

    这可能是您的.sql文件大小的问题 .

    如果你使用的是xampp . 转到xampp控制面板 - >单击MySql config - >打开my.ini .

    增加数据包大小 .

    max_allowed_packet = 2M -> 10M
    
  • 4

    检查Mysql服务器的日志总是一个好主意,因为它消失了 .

    它会告诉你 .

  • 0

    对于使用XAMPP的用户,C:\ xampp \ mysql \ bin \ my.ini中有2个 max_allowed_packet 参数 .

  • 3

    出现此错误基本上有两个原因 .

    • 你的内存太低了 .

    • 尝试连接时,数据库连接已关闭 .

    您可以在下面尝试此代码 .

    # Simplification to execute an SQL string of getting a data from the database
    def get(self, sql_string, sql_vars=(), debug_sql=0):
        try:            
            self.cursor.execute(sql_string, sql_vars)
            return self.cursor.fetchall()
        except (AttributeError, MySQLdb.OperationalError):
            self.__init__()
            self.cursor.execute(sql_string, sql_vars)
            return self.cursor.fetchall()
    

    无论背后的原因如何,它都能减轻错误,特别是出于第二个原因 .

    如果它是由低RAM引起的,您必须从代码,数据库配置或简单地提高RAM来提高数据库连接效率 .

  • 37

    导致此错误的原因有多种 .

    MySQL / MariaDB相关:

    • wait_timeout - 服务器在关闭连接之前等待连接变为活动状态的时间(以秒为单位) .

    • interactive_timeout - 服务器等待交互式连接的时间(以秒为单位) .

    • max_allowed_packet - 数据包或生成/中间字符串的最大字节数 . 设置与最大BLOB一样大,为1024的倍数 .

    my.cnf 的示例:

    [mysqld]
    # 8 hours
    wait_timeout = 28800
    # 8 hours
    interactive_timeout = 28800
    max_allowed_packet = 256M
    

    服务器相关:

    • 您的服务器已满内存 - 使用 free -h 查看有关RAM的信息

    框架相关:

    • 检查框架的设置 . Django例如使用 CONN_MAX_AGE (见docs

    如何调试它:

    • 检查MySQL / MariaDB变量的值 .

    • with sql: SHOW VARIABLES LIKE '%time%';

    • 命令行: mysqladmin variables

    • 打开错误的详细程度:

    • MariaDB: log_warnings = 4

    • MySQL: log_error_verbosity = 3

    • 检查docs for more info about the error

  • 4

    如果您知道自己离线了一段时间,可以关闭连接,进行处理,重新连接并编写报告 .

相关问题