seltsam SQLException - Konnte nicht abgerufen werden transation nur-lese-status server

Ich habe eine Quarz Job, führt eine Gespeicherte Prozedur in meiner MySQL-Datenbank alle 5 Minuten einmal, und für einige Grund, 1 aus 3 Ausführungen schlägt fehl und gibt diese seltsame Ausnahme. Ich habe gesucht und gesucht, was diese exception bedeutet, aber ich konnte keine Lösung finden. Hier ist der volle stack-trace:

java.sql.SQLException: Could not retrieve transation read-only status server
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:951)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
    at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3939)
    at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3910)
    at com.mysql.jdbc.PreparedStatement.checkReadOnlySafeStatement(PreparedStatement.java:1258)
    at com.mysql.jdbc.CallableStatement.checkReadOnlySafeStatement(CallableStatement.java:2656)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1278)
    at com.mysql.jdbc.CallableStatement.execute(CallableStatement.java:920)
    at com.mchange.v2.c3p0.impl.NewProxyCallableStatement.execute(NewProxyCallableStatement.java:3044)
    at org.deadmandungeons.website.tasks.RankUpdateTask.execute(RankUpdateTask.java:30)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 1,198,219 milliseconds ago.  The last packet sent successfully to the server was 950,420 milliseconds ago.
    at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3673)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3562)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4113)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2812)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2761)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1612)
    at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3933)
    ... 9 more
Caused by: java.net.SocketException: Connection timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3116)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3573)
    ... 17 more

So, ich dachte, es ist das timing, weil es denkt, dass der MySQL-server im nur-Lesen-status?
Dies geschieht nur für diese Quarz-job, und nicht jeder anderen Zeit, wenn ich mit der Datenbank kommunizieren. Diese Ausführung ist natürlich passiert in einem anderen thread, aber ich denke nicht, dass hätte nichts damit zu tun.
Warum würde er denken, war der server im nur-Lesen-Modus?

Auch, ich glaube nicht, dass "transation" ist ein Wort, also, es ist so...

Welche MySQL version benutzt du? Siehe hier: bugs.mysql.com/bug.php?id=70290, Wenn Sie google die genaue Meldung finden Sie weitere Seiten, die auch im Zusammenhang mit dieser Meldung.
Die MySQL version ist 5.6.10-log, die ist relativ neu. Auch, in diesem thread, Ihr problem war, dass eine bestimmte variable nicht unterstützt wurde. Diese stack-trace zeigt, etwas ein wenig anders. Ich habe versucht, auf der Suche nach der genauen Meldung.
OK, siehe auch hier: toadworld.com/products/toad-extension-for-eclipse/f/42/t/... Sie sagen Sie einfach direkt 5.6 ist noch nicht vollständig getestet oder unterstützt. Aber dies ist von Oktober 2013. Ich denke, man sollte offen einen Fehler mit MySQL und sehen, was Sie sagen.
haben Sie diese überprüft ? stackoverflow.com/questions/6865538/...
Ich habe gesehen, das die Kommunikation schrieb aus Java vor; es bedeutet normalerweise, dass der client versucht, eine Verbindung zu verwenden, dass der server geschlossen hat. Es hat fast 1000 Sekunden seit dem erfolgreichen Paket, also vielleicht gibt es eine 15-minütige timeout der Verbindung auf den MySQL-server? Ich weiß es nicht kaufen, da eine version Problem, mag sein, aber die Netzwerk-Protokolle für dieses Zeug nicht bewegen zu schnell.

InformationsquelleAutor Jon McPherson | 2014-02-08

Schreibe einen Kommentar