项目场景:
微服务连接mysql 不稳定的几种原因总结
问题描述
mysql数据库连接不稳定,比如:每天凌晨2点多服务异常,通过告警看出几乎是每天凌晨2点35到3点10这个时间段 ,一直报错连接不上数据库,再或者 偶尔 连接不上数据库,具体报错类似的报错可能如下:
CannotGetJdbcConnectionException: Failed to obtain JDBC Connection;nested exception is java.sql.SQLTransientConnectionException: DatabookHikariCP - Connection is not available request timed out after 60000ms
原因分析:
1.连接池满了导致的,相关配置是 maximumPoolSize:10
2.sql事务执行时间过长,导致锁表
3.mysqldump备份程序导致锁表了,我的问题属于这种场景,本人对比了dump下来的文件时间刚好和 线上告警连接不上数据库的时间吻合,于是 做了验证,发现mysqldump默认情况 dump的时候会锁表
解决方案:
1.第一种情况。加大配置
maximumPoolSize:60
2.第二种情况:优化sql
3.第3种情况: 加上mysqldump的时候 加上–skip-opt,–single-transaction等参数防止锁表,主要还是靠–single-transaction解决的