数据库异常,导致druid获取连接超时,数据库恢复后应用无法恢复,必须重启服务

发布于 2021-12-02 20:52:39 字数 1020 浏览 855 评论 3

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

策马西风 2021-12-07 19:29:22

同样遇到这个问题,数据库重启后,应用也必须重启,不知道这个问题druid现在提供解决方案了没。

臻嫒无言 2021-12-04 23:15:48

配置testWhileIdle没有效果啊,数据库重启后,应用还是无法自动重连,必须重启应用

风柔一江水 2021-12-04 18:59:43

配置testWhileIdle能解决这个问题,同时请提供异常堆栈信息,方便诊断

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文