[MYSQL] Kolejne pytanie

jbrudek | 2021-02-17 10:25:32 UTC | #1

Witajcie to znowu ja, tym razem mam problem z błędem MySQL, nie wiem co spowodowało ten błąd, ale kiedy jestem sam na serwerze wszystko działa bardzo dobrze, a gdy wejdzie ktoś więcej to nagle wywala takie błędy:

błędy

Pastebin bo za długie błędy


riko.dev | 2020-06-08 10:58:41 UTC | #2

Wystarczy zapoznać się z informacją w konsoli.

Could not create connection to database server. Attempted reconnect 3 times. Giving up.

Plugin nie może połączyć się z serwerem. Sprawdź, czy wpisane w konfiguracji dane są poprawne. Możliwe, że ten serwer MySQL pozwala tylko na połączenia z wewnątrz.


jbrudek | 2020-06-08 11:03:32 UTC | #3

Dzięki za szybką odpowiedź, ale mysql działa, problem robi się przy połączeniu się kolejnego gracza


psycho | 2020-06-08 11:12:37 UTC | #4

A nie tworzysz nowego połączenia przy jego połączeniu?


jbrudek | 2020-06-08 11:13:51 UTC | #5

tworzę ale je zamykam, czy to źle?, bo jeśli jestem sam na serwerze jest OK, gdy jest 2 już nie.


psycho | 2020-06-08 11:14:47 UTC | #6

Moim zdaniem wszystko powinno się opierać o jedno połączenie/pool, który wykonywałby kolejne kwerendy i był zamykany przy zamknięciu pluginu / utracie połączenia z bazą danych.


jbrudek | 2020-06-08 11:16:41 UTC | #7

hm, przeczytałem że wyjątek com.mysql.jdbc.exceptions.jdbc4.CommunicationsException powstaje po pewnym czasie bezczynności. Ciekawe co mówisz bo jedni mówią że połączenia powinno się zamykać i tworzyć nowe, a niektórzy żeby korzystać z jednego


Nieznajomy11 | 2020-06-08 11:18:08 UTC | #8

Powinno się dać zająć połączeniami bibliotece (np hikaricp), a nie wymyślać. Jedno połączenie to chyba prawie zawsze zła opcja w aplikacji, która ciągle pracuje.


jbrudek | 2020-06-08 11:27:20 UTC | #9

Wracając do tematu; jakieś pomysły?

EDIT: Skłaniam się ku temu, że połączenie jest przerywane, spróbuje wykonywać zapytanie SELECT NOW() co minutę, zapobiegnie to bezczynności. Jeśli macie jakieś pomysły, podrzućcie coś :slight_smile:


Nieznajomy11 | 2020-06-08 11:50:31 UTC | #10

Nie wiemy nic o twojej aplikacji, jak jest zaimplementowane połączenie z bazą. Po samym błędzie nic nie można powiedzieć więcej, niż polecić używanie biblioteki z automatycznym zarządzaniem połączeniami.


jbrudek | 2020-06-08 11:55:36 UTC | #11

Chodzi o to?

Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();

result = st.executeQuery(query);

Nieznajomy11 | 2020-06-08 12:18:43 UTC | #12

W tym kodzie nigdzie nie ma zamykania połączenia widocznego, a klasa DriverManager wydaje się być stworzoną przez ciebie. Nadal nic nie da się tutaj powiedzieć.


jbrudek | 2020-06-08 12:22:16 UTC | #13

Klasa DriverManager pochodzi z package java.sql

Cała metoda

Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();

result = st.executeQuery(cos);

String isBan = null;
Long date = null;

if(result.next())
{
    isBan = result.getString("NICK");
    date = result.getLong("ENDTIME");
}

connection.close();

Nieznajomy11 | 2020-06-08 12:47:54 UTC | #14

Powinieneś używać do obsługi Closeable try-catch-finally lub najlepiej try-with-resources. Jest jakiś konkretny powód, dla którego nie używasz biblioteki do obsługi bazy danych?


jbrudek | 2020-06-08 15:53:37 UTC | #15

Nie ma, polecisz jakiś poradnik do bibliotek?


Nieznajomy11 | 2020-06-11 10:12:03 UTC | #16

https://www.baeldung.com/hikaricp


system | 2021-02-17 10:25:34 UTC | #17

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.