数据库异常,导致druid获取连接超时,数据库恢复后应用无法恢复,必须重启服务
@wenshao 你好,想跟你请教个问题:
我们系统通过druid连接mysql的时候出现了获取连接超时的错误,帮忙提点建议吧。
错误信息是:
com.alibaba.druid.pool.GetConnectionTimeoutException:wait millis 60000,active 0
我们环境是mysql双机,通过keepalived配置的VIP,双机之间做的双向同步,同步方式是半同步。
druid配置如下:
# 配置初始化大小、最小、最大
initialSize=10
minIdle=10
maxActive=30
# 配置获取连接等待超时的时间
maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 'x'
事件发生的时候,是半同步出现异常,一个insert语句同步失败,然后同步中止了,后面跳过这个sql之后重新启动同步,数据库恢复正常了,但业务没有恢复,检查日志发现存在获取连接超时的错误,重启后问题恢复,猜测因为半同步异常导致之前的连接失效了。但druid没有销毁之前的连接,无法创建新的连接,导致应用无法获取新的连接。
现在想到是配置testWhileIdle或者testOnBorrow,但不确定能否解决这种问题。
主要我们一直没能在测试环境复现异常场景,之前试过断网、kill 数据库的方式都不行,所以现在没法验证调整参数能否起到作用,温少有没什么好的建议?遇到过此类问题么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
同样遇到这个问题,数据库重启后,应用也必须重启,不知道这个问题druid现在提供解决方案了没。
配置testWhileIdle没有效果啊,数据库重启后,应用还是无法自动重连,必须重启应用
配置testWhileIdle能解决这个问题,同时请提供异常堆栈信息,方便诊断