原因一. MySQL 服务宕了
判断是否属于这个原因的方法很简单,进入mysql控制台,查看mysql的运行时长mysql> show global status like 'uptime';+---------------+---------+| Variable_name | Value |+---------------+---------+| Uptime | 3414707 |+---------------+---------+1 row in set或者查看MySQL的报错日志,看看有没有重启的信息如果uptime数值很大,表明mysql服务运行了很久了。说明最近服务没有重启过。如果日志没有相关信息,也表名mysql服务最近没有重启过,可以继续检查下面几项内容。
原因二. mysql连接超时
即某个mysql长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。 此后再通过这个connection发起查询的时候,就会报错server has gone away (大部分PHP脚本就是属于此类)mysql> show global variables like '%timeout';+----------------------------+----------+| Variable_name | Value |+----------------------------+----------+| connect_timeout | 10 || delayed_insert_timeout | 300 || innodb_lock_wait_timeout | 50 || innodb_rollback_on_timeout | OFF || interactive_timeout | 28800 || lock_wait_timeout | 31536000 || net_read_timeout | 30 || net_write_timeout | 60 || slave_net_timeout | 3600 || wait_timeout | 28800 |+----------------------------+----------+10 rows in setwait_timeout 是28800秒,即mysql链接在无操作28800秒后被自动关闭