【问题标题】:SQLTransientConnectionException after upgrading MariaDB connector升级 MariaDB 连接器后出现 SQLTransientConnectionException
【发布时间】:2017-10-15 14:03:19
【问题描述】:

我已将 "org.mariadb.jdbc" % "mariadb-java-client" 连接器从 1.5.9 升级到 1.6.0,但由于超时异常,我在连接到数据库时开始失败。

我将它与 HikariCP 2.5.1 和 Slick 3.2.0 一起使用。如果我再次将更改回滚到 MariaDB 连接器 1.5.9,它会成功连接,如果我尝试直接升级到 2.0.1,它会失败并出现同样的错误。

问题是基于the 1.6.0 changelog,我们不应该尝试任何重大更改。但是根据the differences in the GitHub repository 的说法,它可能会比更改日志中指定的修改更多:/

本地数据库异常:

java.sql.SQLTransientConnectionException: xxx.db - Connection is not available, request timed out after 5006ms.
at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:18)
at slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:439)
at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:47)
at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:38)
at slick.basic.BasicBackend$DatabaseDef$class.acquireSession(BasicBackend.scala:218)
at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:38)
at slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:239)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:156)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:118)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.throwException(ExceptionMapper.java:92)
at org.mariadb.jdbc.Driver.connect(Driver.java:108)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:95)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:101)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:430)
at com.zaxxer.hikari.pool.HikariPool.access$500(HikariPool.java:64)
at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:570)
at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:563)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
... 3 common frames omitted
Caused by: java.sql.SQLException: Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1020)
at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:481)
at org.mariadb.jdbc.Driver.connect(Driver.java:103)
... 12 common frames omitted
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:392)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1013)
... 14 common frames omitted

远程数据库异常:

java.sql.SQLTransientConnectionException: xxx.db - Connection is not available, request timed out after 5003ms.
    at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
    at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
    at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
    at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:18)
    at slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:439)
    at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:47)
    at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:38)
    at slick.basic.BasicBackend$DatabaseDef$class.acquireSession(BasicBackend.scala:218)
    at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:38)
    at slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:239)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

    标签: scala jdbc mariadb slick hikaricp


    【解决方案1】:

    至少在本地情况下,看起来确实是这样的:

    • 端口配置错误。或者,
    • 池大小超过了数据库的最大值。或者,
    • 用户名/密码不正确。或者,
    • 用户无权连接服务器或指定数据库。

    java.net.ConnectException: Connection refused 是套接字级别的错误。通常,这表明指定端口上没有运行服务器,或者服务器出于某些其他原因(安全等)拒绝连接。

    您可以仔细检查所有驱动程序/数据源属性以验证它们是否正确。如果您可以发布您的 HikariCP 配置,这可能会很有用。

    【讨论】:

      【解决方案2】:

      免责声明:我是 mariadb 开发者之一

      在 1.6.0 版本中,“usePipelineAuth”选项改变了连接实现。

      在连接期间,会执行不同的查询。 When option is active those queries are send using pipeline (all queries are send, then only all results are reads), permitting faster connection creation.

      这可以节省网络延迟。

      禁用此选项可能会解决您的问题。

      同时,我在 mariadb 跟踪器上创建了一个issue

      【讨论】:

      • ? ? ? 感谢您的评论。如您所说,将其设置为 false 作为 JDBC 连接 URL 参数可使连接再次正常工作。为了提供更多信息以防万一,如果我升级到最后一个连接器版本(2.0.1),只要我保持禁用此标志,它仍然可以工作。
      猜你喜欢
      • 2017-01-10
      • 2019-12-07
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多