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

flo*_*eft 221 mysql mysql-error-2006

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

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

2006, MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)

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

Geo*_*rge 345

我已经多次遇到这种情况,我通常会发现答案是一个非常低的默认设置max_allowed_packet.

将其提升到/etc/my.cnf(低于[mysqld])8或16M通常可以修复它.(MySql 5.7中的默认值4194304是4MB.)

[mysqld]
max_allowed_packet=16M
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,这可以在服务器运行时设置.使用:"set global max_allowed_pa​​cket = 104857600".注意:我的值将其设置为100MB. (25认同)
  • 对于xampp用户,my.cnf可以在以下位置找到:C:\ xampp\mysql\bin \ (25认同)
  • 重要说明:我必须重新启动我的 mysql 服务器才能使此效果生效。即`mysql.server stop`、`mysql.server start`(2018 年 10 月,MySQL v5.7,MacOS) (5认同)
  • 在WAMP上:C:\ wamp\bin\mysql\mysql5.6.12\my.ini,在[wampmysqld]下设置max_allowed_pa​​cket = 500M (3认同)
  • 修复了我的问题:) (2认同)

Sat*_*h D 41

我有同样的问题,但max_allowed_packet改变my.ini/my.cnf文件下[mysqld]的伎俩.

添加一行

max_allowed_pa​​cket的= 500M

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

  • 另一个人写了16M,你写了500M,这个设置的意义是什么? (3认同)
  • @pal4life 这是允许的插入语句的最大大小。如果您的插入语句超过 16M(如果该语句由 longblob 列等组成)怎么办?为了安全起见,如果您要插入大量数据,请将其设置为 500M 之类的大值。 (2认同)

小智 33

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

set global max_allowed_packet=268435456;
Run Code Online (Sandbox Code Playgroud)

  • 要检查是否已更改或查看当前值,可以使用“显示变量如'max_allowed_pa​​cket';” (2认同)

Nie*_*sol 32

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

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

  • 2018 年:mysqli_ping 已弃用 (2认同)

Yzm*_*rez 16

错误:2006(CR_SERVER_GONE_ERROR)

消息:MySQL服务器已经消失

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

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

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

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only
Run Code Online (Sandbox Code Playgroud)

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

有关如何处理Mysql连接问题的更多信息.

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


uwe*_*uwe 16

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

--max_allowed_packet=268435456
Run Code Online (Sandbox Code Playgroud)

...\MAMP\bin\startMysql.sh

积分和更多细节在这里


joz*_*ozo 13

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

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
Run Code Online (Sandbox Code Playgroud)

服务器相关:

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

框架相关:

  • 检查您的框架的设置。以 Django 为例使用CONN_MAX_AGE(见文档

如何调试它:

  • 检查 MySQL/MariaDB 变量的值。
    • 使用 sql: SHOW VARIABLES LIKE '%time%';
    • 命令行: mysqladmin variables
  • 为错误打开详细信息:
    • 玛丽亚数据库: log_warnings = 4
    • MySQL: log_error_verbosity = 3
  • 检查文档以获取有关错误的更多信息


小智 10

由于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


小智 10

如果您使用的是 xampp 服务器:

转到 xampp -> mysql -> bin -> my.ini

更改以下参数:

max_allowed_pa​​cket = 500M

innodb_log_file_size = 128M

这对我帮助很大:)


Ken*_*ngi 9

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

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

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

upload_max_filesize=8M
Run Code Online (Sandbox Code Playgroud)

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


Pik*_*er2 9

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

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

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

检查你的记忆,free -h看看是不是它的原因.


Reh*_*mat 7

对我来说这是RAM问题。

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

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

而且,它修复了所有问题。我已将其设置为cron以每小时运行一次。

crontab -e

0 * * * * bash /root/ram.sh;
Run Code Online (Sandbox Code Playgroud)

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

free -h
Run Code Online (Sandbox Code Playgroud)

并且,您将获得如下内容:

             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
Run Code Online (Sandbox Code Playgroud)


Fed*_*TIK 5

在我的情况下,open_files_limit变量的值较低,这阻止了mysqld对数据文件的访问。

我检查了:

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

在将变量更改为大值之后,我们的服务器又恢复了运行:

[mysqld]
open_files_limit = 100000
Run Code Online (Sandbox Code Playgroud)


小智 5

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

希望这可以帮助其他Wampserver用户。


Mem*_*emo 5

通常,这表明MySQL服务器连接问题或超时。一般可以通过改变来解决WAIT_TIMEOUTmax_allowed_pa​​cket的my.cnf中或类似。

我建议这些值:

wait_timeout = 28800

max_allowed_pa​​cket = 8M


Ale*_*lex 5

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

它会告诉你。


Hri*_*iju 5

如果您使用 XAMPP,则有一种更简单的方法。打开 XAMPP 控制面板,然后单击 mysql 部分中的配置按钮。
在此处输入图片说明

现在单击 my.ini,它将在编辑器中打开。将 max_allowed_pa​​cket 更新为您所需的大小。

在此处输入图片说明

然后重启mysql服务。单击 Mysql 服务上的停止再次单击启动。等待几分钟。 在此处输入图片说明 在此处输入图片说明

然后尝试再次运行您的 Mysql 查询。希望它会起作用。


小智 5

MAMP 5.3,您将找不到 my.cnf 并且添加它们不起作用,因为 max_allowed_pa​​cket 存储在变量中。

一种解决方案可以是:

  1. 转到http://localhost/phpmyadmin
  2. 转到 SQL 选项卡
  3. 运行 SHOW VARIABLES 并检查值,如果它很小,则使用大值运行
  4. 运行以下查询,它将 max_allowed_pa​​cket 设置为 7gb:

    设置全局 max_allowed_pa​​cket=268435456;

对于某些人,您可能还需要增加以下值:

set global wait_timeout = 600;
set innodb_log_file_size =268435456;
Run Code Online (Sandbox Code Playgroud)