Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

BukkitAPI MySQL Błąd


Sebak17

Rekomendowane odpowiedzi

Opublikowano

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
Opublikowano

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

Opublikowano

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;
    }

 

Opublikowano

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

Opublikowano
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

Opublikowano

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

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...