MySQL server has gone away

Posted M_ling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL server has gone away相关的知识,希望对你有一定的参考价值。

一、mysql server has gone away mysql数据库出现这种问题是一个很不友好的错误提示,需要多方位的考虑,才能定位问题所在。 出现这个问题主要要考虑到下面三点:

1、wait_timeout

wait_timeout 默认是28800,单位秒,即8个小时,除非你改小了,基本上就可以排除这个问题。

 

2、interactive_timeout

interactive_timeout 默认是28800,单位秒,即8个小时


3、max_allowed_packet

max_allowed_packet 默认是4194304,单位字节B,即默认值是4M,在导入数据的时候,如果文件大于4M了,就会抛出这个错误的。



二、遇到问题事例:Navicat导入mysql提示[ERR] 2006 - MySQL server has gone away

方法一:

找到服务器mysql安装目录下的my.ini(linux系统下为my.cnf)配置文件,加入以下代码:

max_allowed_packet=500M


方法二:

打开navicat的菜单中的tools,选择server monitor,然后在左列选择数据库,右列则点选variable表单项,寻找到max_allowed_packet将其值改大(wait_timeout、interactive_timeout 这两个值根据自身服务情况进行相应修改)。  


汉化版在菜单中,工具-->服务器监控-->在左侧数据库连接列表前勾选要操作的数据库连接-->在右侧变量中找到max_allowed_packet将其值改大(wait_timeout、interactive_timeout 这两个值根据自身服务情况进行相应修改)。


注:看到别人对三个参数有设置如下

max_allowed_packet=500M

wait_timeout=288000

interactive_timeout = 288000


三个参数注释如下:

max_allowed_packet 是mysql允许最大的数据包,也就是你发送的请求;此参数的作用是,用来控制其通信缓冲区的最大长度

wait_timeout是等待的最长时间,这个值大家可以自定义,但如果时间太短的话,超时后就会现了MySQL server has gone away #2006错误。

interactive_timeout针对交互式连接


三、interactive_timeout和wait_timeout参数区别

interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。

说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。

interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)

wait_timeout:非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等


以上是关于MySQL server has gone away的主要内容,如果未能解决你的问题,请参考以下文章

MySQL server has gone away

MySQL[Err] [Imp] 2006 - MySQL server has gone away .

MySQL server has gone away

[FireDAC][Phys][MySQL] MySQL server has gone away

MySQL server has gone away

MySQL server has gone away的解决方法