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

MySQL错误2006:MySQL服务器已经消失,mysql,mysql-error-2006,Mysql,Mysql Error 2006,我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器 文件处理需要一些时间,并且进程中途终止,出现以下错误: 2006, MySQL server has gone away 我听说过MySQL设置,等待超时,但我需要在办公室的服务器或远程MySQL服务器上更改此设置吗?如果需要,可以更轻松地检查连接并重新建立连接 请参阅以获取相关信息。错误:2006() 消息:MySQL服务器已经消失 通常,您可以重试连接,然后再次执行查询以解决此问题-在完全放弃之前尝试3-4次 我

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

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

2006, MySQL server has gone away

我听说过MySQL设置,等待超时,但我需要在办公室的服务器或远程MySQL服务器上更改此设置吗?

如果需要,可以更轻松地检查连接并重新建立连接

请参阅以获取相关信息。

错误:2006()

消息:MySQL服务器已经消失

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

我假设您正在使用PDO。如果是这样,那么您将捕获PDO异常,增加一个计数器,然后在计数器低于阈值时重试

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

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only
其中300是您认为查询可能花费的最长时间的秒数


编辑:您可能还想使用的另外两个设置是
net\u write\u timeout
net\u read\u timeout

如果您知道要脱机一段时间,您可以关闭连接,进行处理,重新连接并编写报告

我已经多次遇到这个问题,我通常发现答案是非常低的默认设置

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


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

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

使用
设置全局最大允许数据包=104857600
。这将其设置为100MB。

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

…\MAMP\bin\startMysql.sh


积分和更多细节

我也有同样的问题,但在
[mysqld]
下的
my.ini/my.cnf
文件中更改
max\u allowed\u数据包
成功了

加行

允许的最大数据包长度=500米


现在
完成后重新启动MySQL服务

此错误是由于等待超时过期而发生的

只需转到mysql服务器检查其等待超时:

mysql>显示变量,如“等待超时”

mysql>设置全局等待超时=600#10分钟或最大等待时间 你需要什么


在您的
my.ini/my.cnf
中取消对下面的对齐的注释,这将把您的大文件分割成更小的部分

# binary logging format - mixed recommended
# binlog_format=mixed


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

再次在php.ini(xampp/php/php.ini)上更改upload\u max\u filesize选项大小。 e、 g


让我头痛了一段时间直到我发现了这个。希望有帮助。

对于“流浪者”框,请确保为该框分配足够的内存

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

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

set global max_allowed_packet=268435456;

在我的例子中,是
open\u files\u 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

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

我尝试更改max_allowed_数据包和wait_timeout设置,但他们都没有修复它

结果是我的服务器内存不足。我添加了一个,解决了我的问题


free-h
检查你的内存,看看这是否是导致它的原因。

对我来说,这是内存问题

即使在一台有12个CPU内核和32 GB 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

不太可能的情况是,在客户端和服务器之间有一个防火墙,强制TCP重置到连接中

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

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

我找到了解决“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服务器。

    我在Ubuntu桌面上的不同MySQL客户端软件中收到错误消息2006。结果是我的JDBC驱动程序版本太旧了

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

    如果您使用的是xampp。转到xampp控制面板->单击MySql配置->打开my.ini

    增加数据包大小

    max_allowed_packet = 2M -> 10M
    

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

    希望这能帮助其他Wampserver用户摆脱困境
    $cfg['Servers'][$i]['host'] = '127.0.0.1';
    
    "$cfg['Servers'][$i]['host']" = 'localhost';
    
    $cfg['Servers'][$i]['AllowNoPassword'] = true;
    
    $cfg['Servers'][$i]['user'] = 'root';
    $cfg['Servers'][$i]['password'] = '';
    
    max_allowed_packet = 2M -> 10M
    
    # 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()
    
    [mysqld]
    # 8 hours
    wait_timeout = 28800
    # 8 hours
    interactive_timeout = 28800
    max_allowed_packet = 256M
    
    set global wait_timeout = 600;
    set innodb_log_file_size =268435456;
    
      public static function getConnection($database, $host, $user, $password)
     {
     if (!self::$instance) {
      return self::newConnection($database, $host, $user, $password);
     } elseif ($database . $host . $user != self::$connectionDetails) {
    
      self::$instance->query('KILL CONNECTION_ID()');
      self::$instance = null;
    
    max_connections = 500
    
    db:
        image: mysql:8.0
        command: --wait_timeout=800 --max_allowed_packet=256M --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password
        volumes:
          - ./docker/mysql/data:/var/lib/mysql
          - ./docker/mysql/dump:/docker-entrypoint-initdb.d
        ports:
          - 3306:3306
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}