mysql出现ERROR : 2006, 'MySQL server has gone away'

来源:互联网 发布:eplan绘图软件 编辑:程序博客网 时间:2024/05/22 15:43

使用Navicat运行SQL文件导入数据库时出现“ MySQL server has gone away”。
原因:SQL语句过大或者语句中含有BLOB或者longblob字段,超出了默认允许最大的数据包。
解决办法:在my.cnf文件中添加以下参数(windows中是my.ini文件)

wait_timeout=2880000 interactive_timeout = 2880000max_allowed_packet = 10M

wait_timeout:服务器关闭非交互连接之前等待活动的秒数。默认值:28800秒(8小时)
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。默认值:28800秒(8小时)

交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议。
非交互式操作:就是你在你的项目中进行程序调用。比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接。那么这时候就是非交互式操作。

在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
如果这个值过大的话,很可能会造成大量的无用的闲置的连接存在,对数据库压力过大;如果设置的小,会增加系统服务器的业务压力。所以,设置为多大,得根据你的服务器的压力大小来配置的,可不是随便写一个数就行了的。

查看数据库的超时值,如下

show global variables like '%timeout';

取值范围是1-2147483(Windows),1-31536000(linux)
例如设置
interactive_timeout=31536000
无论超过最大限度多大的数值,在windows中只能被MySQL解析为2147483(约24.85天),2147483秒后你的程序该出什么错还是什么错,避免不了。

max_allowed_packet:包或任何生成的中间字符串的最大大小。包消息缓冲区初始化为net_buffer_length字节,需要时可以增加到max_allowed_packet的大小。
如果表中包含BLOB列或长字符串,就必须增加该值。

查看目前配置

show VARIABLES like '%max_allowed_packet%';

修改方法
在my.cnf文件中增加如下参数(windows中是my.ini文件)

max_allowed_packet = 10M

或者在mysql 命令行中运行

set global max_allowed_packet = 2*1024*1024*10
0 0
原创粉丝点击