Communications link failure The last packet successfully received from the server was 2,687,887 mi

使用场景:

1.tomcat jdbc连接池

2.mysql数据库

3.隔一段时间后就会出现

 Communications link failureThe last packet successfully received from the server was 2,687,887 milliseconds ago之类的错误提示,出现这个问题的原因是使用了无效数据库连接

spring.datasource.mysql.max-idle=10
spring.datasource.mysql.max-wait=10000
spring.datasource.mysql.min-idle=5
spring.datasource.mysql.initial-size=5

下面是mysql服务器配置

Communications link failure The last packet successfully received from the server was 2,687,887 mi_第1张图片

重点看wait_timeout这个参数跟2,687,887 这个打印信息,出现这个报错信息的原因在于操作mysql数据库时使用了一个无效连接,这个连接为什么无效呢?原因就在于2,687,887 这个时间是该连接上次操作mysql数据库的时间,由于这个时间超过2592000这个时间,mysql服务端会自动关闭这个连接,但是连接池没有把这个连接废除导致!

解决方法:

数据库连接增加下面配置

spring.datasource.mysql.validation-query=SELECT 1
spring.datasource.mysql.test-on-borrow=false
spring.datasource.mysql.test-while-idle=true
spring.datasource.mysql.time-between-eviction-runs-millis=30000

time-between-eviction-runs-millis这个参数一定要小于wait_timeout这个值,否则还有可能报上面的错!

test-on-borrow这个则可以完全避免上面的问题,但是效率没有使用test-while-idle高!

 

PS:

wait_timeout是针对jdbc客户端的超时设置,而interactive_timeout则是针对打开的mysql客户端,比如cmd等,但不包括navicat,navicat丢失连接后会自动重连的!!!

你可能感兴趣的:(mysql)