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

dicome 发布于 2014/11/26 16:08
阅读 4K+
收藏 0

@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 数据库的方式都不行,所以现在没法验证调整参数能否起到作用,温少有没什么好的建议?遇到过此类问题么?

加载中
0
wenshao
wenshao
配置testWhileIdle能解决这个问题,同时请提供异常堆栈信息,方便诊断
0
啥不懂
啥不懂
配置testWhileIdle没有效果啊,数据库重启后,应用还是无法自动重连,必须重启应用
0
geeksun
geeksun

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

0
denghc9
denghc9

同样遇到此种问题。。。。

返回顶部
顶部