MySQL server has gone away有几种情况:
1、应用程序(比如PHP)长时间的执行批量的MYSQL语句,最常见的就是采集或者新旧数据转化。
解决方案,在my.cnf文件中添加或者修改以下两个变量:wait_timeout=2880000
interactive_timeout = 2880000 关于两个变量的具体说明可以google或者看官方手册。 如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如: sql = "set interactive_timeout=24*3600"; mysql_real_query(...)2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。 比如,图片数据的处理 解决方案 在my.cnf文件中添加或者修改以下变量:max_allowed_packet = 10M(也可以设置自己需要的大小)max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。 可能有很多人遇到过标题中的这个错误。之前我们也经常遇到,一直没有认真找是什么原因。今天花了些时间google了下。原来,这个问题并不是MySQL的bug, 它本质是一个配置问题, 解决起来也不麻烦。
在Mysql客户端中, 通过 SHOW VARIABLES; 语句可以查看Mysql系统变量。这些变量中名为 wait_timeout 的变量的值过于小,就是造成这个错误的根源。这个变量的含义是:如果在该连接在 wait_timeout 时间内没有进行任何查询(idle时间超时), 服务器将自动关闭这个连接。
如果你的脚本在执行了一个查询之后,接着是另外一个很耗时的没有任何数据库查询的操作(超过了wait_timeout设置的值,单位是秒), 之后你再进行数据库操作,就一定会遇到标题所示的错误。
我的解决方案是,在必要的地方,数据库连接之后,立刻执行一句”SET SESSION wait_timeout=65535″。