测试中的新项目有个奇怪的现象,每天早上不能访问,后台报Software caused connection abort: socket write error 错误,重启一下就好了。经查是MySQL连接超时设置的问题。默认的wait_timeout 是28800,8个小时。刚好经过一个晚上就超时了。解决办法有两种,一是将连接池中的超时时间设置的短于这个值(本项目用的spring boot data jpa,默认连接,设置后不起作用);方法二,把mysql的这个值设大一些:在[mysqld]下加wait_timeout = 86400。此时是设置的全局设定,可通过命令 show global variables like “%timeout%”;看到变化,而show variables like “%timeout%”;和show session variables like “%timeout%”;仍为原值。

这个值设置为多大应根据应用使用情况来定。太小会导致频繁超时,太多会导致连接长时间不释放,也会出错。所以一方面调整好这个数值,一方面采用更好的连接池方案。