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:
Pastebin bo za długie błędy
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:
Pastebin bo za długie błędy
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.
Dzięki za szybką odpowiedź, ale mysql działa, problem robi się przy połączeniu się kolejnego gracza
A nie tworzysz nowego połączenia przy jego połączeniu?
tworzę ale je zamykam, czy to źle?, bo jeśli jestem sam na serwerze jest OK, gdy jest 2 już nie.
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.
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
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.
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:
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.
Chodzi o to?
Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();
result = st.executeQuery(query);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ć.
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();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?
Nie ma, polecisz jakiś poradnik do bibliotek?

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