天天看点

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 这两个值根据自身服务情况进行相应修改)。

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

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连接数据库是非交互式连接。