一、异常日志
$ExecutionErrorOnPhysicalDBException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 151,463 milliseconds ago. The last packet sent successfully to the server was 2 milliseconds ago.
二、错误原因
MySQL服务在长时间不连接时断开了。
三、原因分析
从错误原因来看,是客户端连接MySQL服务时间过长,触发了MySQL服务机制,服务端主动断开了与客户端的连接。
四、解决方案
通过 登录MySQL服务,使用show global variable like '%timeout%'; 命令查看MySQL超时相关全局参数,找到 interactive_timeout、wait_timeout两个参数,查看该值设置得是否合理,interactive_timeout参数含义:服务器关闭交互式连接前等待活动的秒数,wait_timeout参数含义:服务器关闭非交互连接之前等待活动的秒数,两个参数的单位时间均为秒(s)。连接超过参数设定的时间时连接会断开,需要重新连接。在linux环境中两个参数值的范围为:1-31536000s。
综上述:
方案一:可以同时修interactive_timeout、wait_timeout两个参数值来解决该问题,建议该值不要设置太大,这样会造成MySQL服务压力过大,最终导致不可用。(在$mysql_install_loal/etc/my.cnf配置文件中修改)--不推荐设置该值过大来解决该问题。
方案二:应用使用连接池设置超时时间或对MySQL服务进行心跳检测与服务端保持连接来避免该问题。