2017-05-16 6 views
0

Ich habe den "org.mariadb.jdbc" % "mariadb-java-client" Konnektor von 1.5.9 auf 1.6.0 aktualisiert, und ich hatte aufgrund von Timeout-Ausnahmen einen Fehler bei der Verbindung mit der DB gestartet.SQLTransientConnectionException nach dem Upgrade von MariaDB-Konnektor

Ich benutze es mit HikariCP 2.5.1 und Slick 3.2.0. Wenn ich die Änderung erneut auf den MariaDB-Connector 1.5.9 zurücksetze, wird eine Verbindung hergestellt, und wenn ich versuche, direkt auf 2.0.1 zu aktualisieren, schlägt sie mit dem gleichen Fehler fehl.

Die Sache ist, dass basierend auf the 1.6.0 changelog, wir keine Bruchänderung experimentieren sollten. Aber nach the differences in the GitHub repository, könnte es noch einige Modifikationen als die, die im Changelog angegeben haben:/

Ausnahme mit einem lokalen DB:

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 

Ausnahme mit einem Remote-DB:

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) 

Antwort

1

Disclaimer: Ich bin einer der MariaDB developper

In 1.6.0 Version "usePipelineAuth" Option hat die Verbindung Implementierung geändert.

Während der Verbindung werden verschiedene Abfragen ausgeführt. Wenn die Option aktiv ist, werden diese Abfragen mit Pipeline gesendet (alle Abfragen werden gesendet, dann werden nur alle Ergebnisse gelesen), was eine schnellere Verbindungsherstellung ermöglicht.

Diese erlauben, Netzwerklatenz zu sparen.

Das Deaktivieren dieser Option wird Ihr Problem wahrscheinlich lösen.

Gleichzeitig habe ich eine issue auf mariabb Tracker erstellen.

+0

Danke für Ihren Kommentar. Wie Sie bereits gesagt haben, wird durch die Einstellung false als JDBC-Verbindungs-URL-Parameter die Verbindung wieder ordnungsgemäß hergestellt. Um mehr Informationen für den Fall bereitzustellen, wenn ich bis zur letzten Connector-Version (2.0.1) upgrade, funktioniert es immer noch, solange ich dieses Flag deaktiviert halte. –

1

Es sieht jedenfalls zumindest im lokalen Fall so aus:

  • Der Port ist falsch konfiguriert . Oder:
  • Die Poolgröße überschreitet das Maximum der Datenbank. Oder
  • Der Benutzername/das Passwort ist falsch. Oder
  • Der Benutzer ist nicht berechtigt, eine Verbindung mit dem Server oder der angegebenen Datenbank herzustellen.

java.net.ConnectException: Connection refused ist ein Socket-Level-Fehler. In der Regel bedeutet dies, dass entweder kein Server auf dem angegebenen Port ausgeführt wurde oder der Server die Verbindung aus einem anderen Grund (Sicherheit usw.) zurückweist.

Sie können alle Treiber/Datenquellen-Eigenschaften überprüfen, um zu überprüfen, ob sie korrekt sind. Es könnte nützlich sein, wenn Sie Ihre HikariCP-Konfiguration veröffentlichen könnten.

Verwandte Themen