grails应用程序中的Mysql连接超时,在ELB上使用mariadb galera集群

Posted

技术标签:

【中文标题】grails应用程序中的Mysql连接超时,在ELB上使用mariadb galera集群【英文标题】:Mysql connection time out in grails application, using mariadb galera cluster over ELB 【发布时间】:2015-12-05 05:55:35 【问题描述】:

我刚刚迁移了我的数据库以支持从 mysql 到 mariadb 的 2 节点集群数据库的复制。数据库托管在不同的域上并通过 ELB 访问,当我将应用程序指向其中一个节点时,应用程序工作正常,但是当我使用 ELB url 连接数据库时,它会随机波动并经常显示以下错误

Communication Link Failure
could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

这是我的数据源配置:-

dataSource 
shard = false
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
dbCreate = "update" // one of 'create', 'create-drop','update'

properties 
    initialSize=5
    maxActive=50
    minIdle=5
    maxIdle=25
    maxWait = 10000
    maxAge = 10 * 60000
    timeBetweenEvictionRunsMillis=5000
    minEvictableIdleTimeMillis=60000
    validationQuery="SELECT 1"
    validationInterval=15000
    testWhileIdle=true
    testOnBorrow=true
    testOnReturn=false
    jdbcInterceptors = "ConnectionState"
    defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED

任何人都可以找出问题所在并提供可能的解决方案

【问题讨论】:

您能否尝试增加 DataSourceConfig.groovy 中的 maxWait 和 maxAge,因为有时它可能会花费比平时更多的时间。 已经尝试了所有可能的组合 如何在 DataSourceConfig 设置中添加一个 autoReconnect 属性。它的默认值为 false。您可能希望将其设置为 true 并查看是否可以解决您的问题。 已经有了,我在 jdbc:mysql:///?zeroDateTimeBehavior=convertToNull&autoReconnect=true 中添加了这个 【参考方案1】:

我发现了这个问题,ELB 中有一个名为 idleTimeOut 的字段被设置为仅 60 秒,并且花费超过 1 分钟的查询意外下降,在将超时时间增加到 600 秒后,问题不再复制. :)

【讨论】:

以上是关于grails应用程序中的Mysql连接超时,在ELB上使用mariadb galera集群的主要内容,如果未能解决你的问题,请参考以下文章

Grails 2.3.0 和 mysql 连接超时

大型文件上传期间的 Grails 连接超时

Grails 和 MySQL 连接异常

如何在 Grails 中实现超时页面

在MySQL,Grails 2应用程序更长时间不活动期间保持池连接活动(或将它们计时并获得新的连接)的正确方法

Grails Quartz MongoDB 连接不断打开