当遇到has gone away时,一般有如下几种情况导致:
1.wait_timeout设置时间较短,sql执行时间过长导致连接超时
2.max_allow_packets设置较小,单个packet传输数据大,导致数据无法传输
3.MySQL server宕机
4.连接请求被手动kill
5.max_statement_time 查新执行时间设置小,导致sql中断后,应用端之后如果又发起sql出现has gone away
一般出现has gone away的产生的原因较多,如果通过上面出现的几种原因均没有排除,则可以使用tcpdump抓包,复现后终止抓包,使用wireshark工具分析报文,找出has gone way 的具体原因
tcpdump -i eth0 -s 0 -w /var/tmp/tcpdump.cap port 3306