Skocz do zawartości

BukkitAPI MySQL Błąd

Polecane posty

Autor tematu Napisano (edytowany)

Witam, zacząłem ostatnio testować plugin na hostingu TitanAXE i co jakiś czas zaczęły się sypać błędy z mysql. Problem występuję, gdy przez dłuższy czas nie ma interakcji z bazą.

Tak wygląda URL do łączenia:

Cytat

("jdbc:mysql://" + HOST + ":" + PORT + "/" + DATABASE + "?autoReconnect=true")

Błąd:

[16:46:32] [Thread-165/WARN]: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 63,862,730 milliseconds ago.  The last packet sent successfully to the server was 63,862,774 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
[16:46:32] [Thread-165/WARN]: 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[16:46:32] [Thread-165/WARN]: 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[16:46:32] [Thread-165/WARN]: 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[16:46:32] [Thread-165/WARN]: 	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3348)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1967)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310)
[16:46:32] [Thread-165/WARN]: 	at me.sebak.mysql.MySQL$3.run(MySQL.java:196)
[16:46:32] [Thread-165/WARN]: Caused by: java.net.SocketException: Connection timed out (Write failed)
[16:46:32] [Thread-165/WARN]: 	at java.net.SocketOutputStream.socketWrite0(Native Method)
[16:46:32] [Thread-165/WARN]: 	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
[16:46:32] [Thread-165/WARN]: 	at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
[16:46:32] [Thread-165/WARN]: 	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
[16:46:32] [Thread-165/WARN]: 	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
[16:46:32] [Thread-165/WARN]: 	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3329)
[16:46:32] [Thread-165/WARN]: 	... 8 more
Edytowano przez Sebak17

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

Ten autoreconnect gówno daje, dlatego przed pobraniem danych sprawdzam czy połączenie nadal jest prawidłowe i ewentualnie łączę się jeszcze raz. Jak do tej pory działa sprawnie.

 

https://github.com/MarcinWieczorek/NovaGuilds/blob/master/src/main/java/co/marcin/novaguilds/impl/storage/MySQLStorageImpl.java#L72-L109

https://github.com/MarcinWieczorek/NovaGuilds/blob/master/src/main/java/co/marcin/novaguilds/impl/storage/AbstractDatabaseStorage.java#L54


Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Coś takiego będzie dobre?

Cytat

public boolean isConnected() {
        if (con == null) {
            return false;
        }
        try {
            con .isValid(1000);
            if((con != null) && (!con .isClosed())){
                return true;
            }
        } catch (SQLException e) {
            Main.getInst().logs_info.info("MYSQL Reconnect");
            return false;
        }
        return true;
    }

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

Jeśli w jednej metodzie zmieścisz sprawdzanie i reconnect to przed faktycznym pobraniem danych zredukujesz ilość kodu do jednej linijki, do wywołania tej metody. Kod jest prawie poprawny. Jeśli ten if w try (nie wiedzieć czemu masz zbyt dużo nawiasów) nie zwróci true i nie zostanie wykonany "return true;" a nie wyrzuci wyjątku, to następną wykonaną linijką będzie też "return true;" na samym końcu. Popracuj nad stylem kodu.


Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
1 minutę temu, MarcinWieczorek napisał:

Jeśli w jednej metodzie zmieścisz sprawdzanie i reconnect to przed faktycznym pobraniem danych zredukujesz ilość kodu do jednej linijki, do wywołania tej metody. Kod jest prawie poprawny. Jeśli ten if w try (nie wiedzieć czemu masz zbyt dużo nawiasów) nie zwróci true i nie zostanie wykonany "return true;" a nie wyrzuci wyjątku, to następną wykonaną linijką będzie też "return true;" na samym końcu. Popracuj nad stylem kodu.

Na pewno skorzystam z twoich rad. Dzięki za pomoc :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dalej ten sam błąd

[14:37:18 WARN]: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 65,909,045 milliseconds ago.  The last packet sent successfully to the server was 65,909,080 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
[14:37:18 WARN]: 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[14:37:18 WARN]: 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[14:37:18 WARN]: 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[14:37:18 WARN]: 	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[14:37:18 WARN]: 	at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
[14:37:18 WARN]: 	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
[14:37:18 WARN]: 	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3348)
[14:37:18 WARN]: 	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1967)
[14:37:18 WARN]: 	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
[14:37:18 WARN]: 	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
[14:37:18 WARN]: 	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)
[14:37:18 WARN]: 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407)
[14:37:18 WARN]: 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325)
[14:37:18 WARN]: 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310)
[14:37:18 WARN]: 	at me.sebak.mysql.MySQL$3.run(MySQL.java:206)
[14:37:18 WARN]: Caused by: java.net.SocketException: Connection timed out (Write failed)
[14:37:18 WARN]: 	at java.net.SocketOutputStream.socketWrite0(Native Method)
[14:37:18 WARN]: 	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
[14:37:18 WARN]: 	at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
[14:37:18 WARN]: 	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
[14:37:18 WARN]: 	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
[14:37:18 WARN]: 	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3329)
[14:37:18 WARN]: 	... 8 more

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×
Okienko zamknie się za 5 sekund...