com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Awaria łącza komunikacyjnego


225

Pracuję nad tym, aby moja baza danych komunikowała się z moimi programami Java.

Czy ktoś może mi dać szybki i brudny program przykładowy za pomocą JDBC?

Dostaję dość głupi błąd:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

Zawartość pliku testowego:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}

17
Byłem głupi. Serwer MySQL nie został uruchomiony :( Udało się po uruchomieniu.
— akfaisel

Odpowiedzi:


251

Więc masz

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego
java.net.ConnectException: Odmowa połączenia

Cytuję z tej odpowiedzi, która zawiera także samouczek MySQL + JDBC:

Jeśli masz SQLException: Connection refusedlub Connection timed outlub konkretnego MySQL CommunicationsException: Communications link failure, to oznacza to, że DB nie jest osiągalny w ogóle. Może to mieć jedną lub więcej z następujących przyczyn:

  1. Adres IP lub nazwa hosta w adresie URL JDBC jest niepoprawna.
  2. Nazwa hosta w adresie URL JDBC nie jest rozpoznawana przez lokalny serwer DNS.
  3. Brak numeru portu lub jest on niepoprawny w adresie URL JDBC.
  4. Serwer DB jest wyłączony.
  5. Serwer DB nie akceptuje połączeń TCP / IP.
  6. W serwerze DB zabrakło połączeń.
  7. Coś pomiędzy Javą a DB blokuje połączenia, np. Firewall lub proxy.

Aby rozwiązać jedno lub drugie, postępuj zgodnie z następującymi wskazówkami:

  1. Sprawdź i przetestuj je ping.
  2. Odśwież DNS lub użyj adresu IP w adresie URL JDBC.
  3. Sprawdź to na podstawie my.cnfMySQL DB.
  4. Uruchom DB.
  5. Sprawdź, czy mysqld jest uruchamiany bez --skip-networking option.
  6. Uruchom ponownie bazę danych i popraw odpowiednio kod, aby zamykał połączenia finally.
  7. Wyłącz zaporę i / lub skonfiguruj zaporę / serwer proxy, aby zezwolić / przekierować port.

Zobacz też:


4
MAMP / MAMP Pro domyślnie ustawia MAMP_skip-networking_MAMP. Musisz wyłączyć tę linię w swoim my.cfn
— Jurik,

6
Nie w tym przypadku, ale awaria łącza komunikacyjnego występuje również, gdy używasz puli połączeń, a połączenia są zamykane z powodu przedłużającej się bezczynności. Tylko w tym przypadku jest napisane: „Ostatni pakiet otrzymał kilka„ X ”sekund temu”
— nikel

@nikel Czy wątki w puli połączeń nie powinny być aktywne przez uruchomienie zapytania sprawdzającego „select 1”? Dlaczego mieliby się zamykać z powodu przedłużającej się bezczynności, skoro ustawiliśmy eksmitora do działania w krótszych odstępach czasu niż limit czasu serwera mysql?
— Farhad,

Tak, zapytanie sprawdzające poprawiłoby to. Chodzi mi o przypadek, gdy nie jest ustawiony, a połączenia w puli są przekroczone z powodu braku aktywności
— Nikel

Czasami brakuje portu w ciągu połączenia, a sterownik spróbuje połączyć się z domyślnym portem 3306 mysql i zawiedzie, jeśli mysql nie działa na tym porcie. To był mój problem, więc powinienem wspomnieć na wypadek, gdyby ktoś uznał to za przydatne.
— Abdul Mannan

10

Łapię ten wyjątek, gdy Java jest poza stertą. Jeśli spróbuję umieścić w pamięci RAM wiele elementów danych - najpierw łapię „ Awaria łącza komunikacyjnego ”, a następnie „ OutOfMemoryError ”.

Zalogowałem to i zmniejszam zużycie pamięci (usuwam 1/2 danych) i wszystko w porządku.


9

W moim przypadku musiałem zastąpić Localhost rzeczywistym adresem IP serwera bazy danych

Zamiast

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

potrzebowałem

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");

W najnowszej aktualizacji 4/5/18: Obecnie używam MySQL Workbench 6.3. Przyszedłem tutaj, aby sprawdzić rozwiązanie, ale znalazłem je sam, po prostu twój serwer MySQL nie działa lub jest zatrzymany. Zrestartowałem mój serwer, działał jak urok.
— Abhishek Ekaanth

7
To jest „najlepsze rozwiązanie” dlaczego? Jaki problem rozwiązuje i jak?
— Markiz Lorne

to rozwiązanie nie może generować ramek danych
— Alan

8

Ten com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionwyjątek występuje, jeśli połączenie z bazą danych jest bezczynne przez długi czas.

To bezczynne połączenie zwraca wartość true, connection.isClosed();ale jeśli spróbujemy wykonać instrukcję, uruchomi ten wyjątek, więc zasugeruję skorzystanie z puli bazy danych.


2
Dzieje się tak również z innych powodów, takich jak „odmowa połączenia”.
— Markiz Lorne

6

Mam ten sam problem od wielu godzin. Używam serwera MAMP

Zamiast używać localhost: [Port Apache], użyj portu MySQL.

Poniżej znajduje się domyślny port MySQL dla serwera MAMP.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

jeśli masz mampa przed zainstalowaniem MySQL, wypróbuj tę metodę
— DAVIS BENNY 15MIS0426,

5

Być może szczekam tutaj niewłaściwe drzewo, ale twój wyjątek wydaje się wskazywać, że twój serwer MySQL jest niedostępny.

Wyjątek w wątku „main” com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego Ostatni pakiet wysłany pomyślnie na serwer był 0 milisekund temu. Sterownik nie otrzymał żadnych pakietów z serwera. w...

Co się stanie, jeśli spróbujesz (z terminala)

mysql -u username -p

Zostaniesz poproszony o podanie hasła związanego z nazwą użytkownika. Czy po podaniu prawidłowego hasła klient mysql łączy się?

Może być konieczne uruchomienie MySQL z Preferencji, jeśli nie. Możesz także ustawić, aby działał podczas uruchamiania.


1
Używam MAMP do uruchomienia mojego serwera MySQL. Czy to byłby problem?
— Josh K

Kiedy łączę się (przez Sequal Pro) z moim komputerem localhost, używam poprawnej nazwy użytkownika / hasła i działa dobrze.
— Josh K

5

W moim przypadku okazało się, że wersja mysql-connector-javabyła za stara.

W mojej wersji demonstracyjnej używam w mysql-connector-javaten sposób:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Ale w środowisku programistycznym używam tego:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

Moja wersja MySQL to 5.1.48 (tak, jest stara, tylko naśladując wersję produktu). Więc spotkałem ten sam błąd.

Ponieważ znaleziono przyczynę, znaleziono również rozwiązanie. Dopasuj wersję!


4
Mało prawdopodobne. Wszystkie te wersje sterowników powinny być kompatybilne wstecz.
— Markiz Lorne

1
Wydaje się, że ten problem został rozwiązany w nowych złączach mysql, patrz stackoverflow.com/questions/14559794/...
— Nishi

Ta sama sprawa dla mnie. Wersja sterownika jest dla MySQL 5, a wersja serwera to 8. Zaktualizowałem więc wersję jar i problem został rozwiązany.
— edenPan

4

Wystąpił ten sam błąd, ponieważ próbowałem uruchomić program bez uruchamiania serwera mysql.

Po uruchomieniu serwera mysql wszystko poszło dobrze.


4

Wcześniejsze odpowiedzi są odpowiednie. Chciałbym jednak zwrócić uwagę na bardziej ogólny problem.

Napotkałem podobny problem, a przyczyną było ograniczenie sieci mojej firmy.

To samo połączenie było udane, gdy byłem w innej sieci.


1
Ten wskaźnik rozwiązał mój problem, określając, że „localhost” działa, kiedy łączę się z VPN, ale to samo nie działa, jeśli rozłączam się z VPN, jednak naprawiłem to, zmieniając „localhost” na „127.0.0.1”
— gannu_lee

4

Zaktualizuj swój adres IP w pliku /etc/mysql/my.cnf

bind-address  = 0.0.0.0

Uruchom ponownie usługi deamon i mysql mysql.


1
Edytowano, aby używać prawidłowego adresu powiązania
— OneCricketeer

3

Pobierz MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' z 'mysql-connector-java-5.1.11.zip') z MySQL .

Musisz wprowadzić słoik sterownika podczas kompilacji i środowiska wykonawczego w ścieżce klasy.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );

Nie, burza błędów sprawia, że ​​niczego nie znajduję. Czy można to zaimportować bez pliku JAR?
— Josh K

@Josh to działa, naprawdę musisz właściwie ustawić ścieżkę klasy. (Lub skopiuj słoik do katalogu% JAVA_HOME% \ jre \ lib \ ext, ale jest to uważane za złą praktykę)
— układarka

3

Ten błąd może również wystąpić, jeśli Java spróbuje połączyć się z MySQL przez SSL, ale coś pójdzie nie tak. (W moim przypadku konfigurowałem pule połączeń Payara Server 5.193.1 z MySQL.)

Niektórzy sugerowali ustawienie useSSL=false. Jednak od wersji Connector / J 8.0.13to ustawienie jest nieaktualne. Oto fragment właściwości konfiguracji MySQL Connector / J 8.0 :

sslMode

Domyślnie połączenia sieciowe są szyfrowane SSL; ta właściwość pozwala wyłączyć bezpieczne połączenia lub wybrać inny poziom bezpieczeństwa. Dozwolone są następujące wartości: DISABLED- Ustanawianie niezaszyfrowanych połączeń; PREFERRED- (domyślnie) Ustanawiaj połączenia szyfrowane, jeśli serwer je włączył, w przeciwnym razie powróć do połączeń nieszyfrowanych; REQUIRED- Nawiąż bezpieczne połączenia, jeśli serwer je włączył, w przeciwnym razie zawiod; VERIFY_CA- Podobnie, REQUIREDale dodatkowo sprawdź certyfikat TLS serwera względem skonfigurowanych certyfikatów urzędu certyfikacji (CA); VERIFY_IDENTITY- Podobnie VERIFY_CA, ale dodatkowo sprawdź, czy certyfikat serwera odpowiada hostowi, z którym próbowane jest połączenie.

Ta nieruchomość zastąpiły wycofywanych właściwości starsze useSSL, requireSSLi verifyServerCertificate, które są nadal akceptowane, ale przekładają się na wartość dla sslModejeśli sslModenie jest wyraźnie określone: useSSL=falsejest tłumaczony sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}jest przetłumaczone na sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}jest przetłumaczone na sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}jest przetłumaczone na sslMode=VERIFY_CA. Nie ma równoważnych starszych ustawień dla sslMode=VERIFY_IDENTITY. Zauważ, że dla wersji serwerowych wszystkim domyślnym ustawieniem sslModejest PREFERRED, a to jest równoznaczne z ustawieniami spuścizny useSSL=true, requireSSL=falseiverifyServerCertificate=false, które w niektórych sytuacjach różnią się od ustawień domyślnych dla Connector / J 8.0.12 i wcześniejszych. Aplikacje, które nadal korzystają ze starszych właściwości i korzystają ze swoich starych ustawień domyślnych, powinny zostać przejrzane.

Starsze właściwości są ignorowane, jeśli sslModesą ustawione jawnie. Jeśli żadne ustawienie sslModelub nie useSSLjest ustawione jawnie, sslMode=PREFERREDzastosowanie ma ustawienie domyślne .

Domyślnie :PREFERRED

Od wersji : 8.0.13

W moim przypadku ustawienie sslMode=DISABLEDbyło wszystkim, czego potrzebowałem, aby rozwiązać problem. To było na maszynie testowej. Ale w przypadku produkcji bezpiecznym rozwiązaniem byłoby prawidłowe skonfigurowanie klienta Java i serwera MySQL do korzystania z protokołu SSL.


Zauważ, że wyłączenie SSL może wymagać również ustawienia allowPublicKeyRetrieval=true. (Ponownie, nie jest to mądra decyzja z punktu widzenia bezpieczeństwa). Więcej informacji znajduje się w Opcjach MySQL ConnectionString :

AllowPublicKeyRetrieval

Jeśli konto użytkownika korzysta z sha256_passworduwierzytelniania, hasło musi być chronione podczas transmisji; Preferowanym mechanizmem jest TLS, ale jeśli nie jest dostępny, zostanie użyte szyfrowanie klucza publicznego RSA. Aby określić klucz publiczny RSA serwera, użyj ServerRSAPublicKeyFileustawienia ciągu połączenia lub ustaw, AllowPublicKeyRetrieval=Trueaby umożliwić klientowi automatyczne żądanie klucza publicznego od serwera. Pamiętaj, że AllowPublicKeyRetrieval=Truezłośliwy serwer proxy może wykonać atak MITM w celu uzyskania hasła w postaci zwykłego tekstu, więc domyślnie jest to Fałsz i musi być jawnie włączony.


Odpowiedni wątek z Payara Server GitHub .
— MS Dousti,

3

Ten sam problem został rozwiązany przez następujące kroki:

  1. Iść do my.cnf

    vi /etc/mysql/my.cnf
  2. Zmodyfikuj jego adres powiązania

    "bind-address = 0.0.0.0"
  3. Uruchom ponownie MySQL

    sudo /etc/init.d/mysql restart

2

Jeśli używasz WAMPlub XAMPserwer, aby zainstalować bazę danych mysql. Następnie musisz jawnie uruchomić mysql, w przeciwnym razie pokaże się com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failurepodczas łączenia z bazą danych


2

rozwiązałem ten problem w łatwy sposób, który zadziałał dla mnie. miałem problem z seme „com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego”. W moim pliku db.properties miałem to: url: jdbc: mysql: // localhost: 90 / myDB, tylko usunąłem adres URL portu, w ten sposób url: jdbc: mysql: // localhost / myDB i to działało dla mnie .


2

Zdarzyło mi się to, kiedy zmieniłem port mysql z 3306 na 3307 w plikach my.ini i php.ini, ale po zmianie portów (3307-> 3306) znów działało dobrze.


2

Jeśli zmieniłeś port, pojawia się taki błąd „com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Błąd łącza komunikacyjnego” Sprawdź numer portu


1

Właśnie tego doświadczyłem.

Musi sprawić, aby działał przez: (można to umieścić w statycznym module inicjującym blok)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

Również poprzez uzyskanie połączenia poprzez:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

zamiast określać parametry logowania

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

Pozdrowienia.


2
Blok statyczny nie jest konieczny od 2007 roku i możesz podać parametry logowania w obu przypadkach.
— Markiz Lorne

1

Spróbuj zmienić localhostna 127.0.0.1.

Host lokalny zostanie rozwiązany ::1. MySQL nie może być domyślnie podłączony przez IPv6.

A oto wynik telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

I nie ma odpowiedzi z serwera MySQL.

Oczywiście, upewnij się, że twój serwer MySQL jest uruchomiony.


To właściwie problem z plikiem / etc / hosts, a nie Mysql
— OneCricketeer

@ cricket_007 Domyślnie localhost jest tłumaczony na :: 1 zamiast 127.0.0.1.
— Haozhe Xie

1
Jasne, tylko jeśli włączony jest ipv6 i zależy od pliku hosts
— OneCricketeer

1
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

jeśli mysql wersja 8 lub wyższa zaktualizowane przez użytkownika złącze


to jest prawidłowa odpowiedź, po prostu dodaj useSSL = false do ciągu połączenia, gdy używasz sterownika MySQL 8 lub nowszego.
— Mohannd

1

Do zdalnego połączenia z MySQL

  1. Dodaj użytkownika zdalnego do MySQL z np. IP = remoteIP:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
  2. Zezwalaj na zdalny dostęp do MySQL (domyślnie wszystkie połączenia zewnętrzne nie są dozwolone):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
  3. W najnowszej wersji sterownika JDBC sterownik JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'

0

Miałem ten sam problem i oto jak to naprawić:

  1. Mój .jsp wywoływał atrybuty, których jeszcze nie zdefiniowałem w serwletu.
  2. Miałem dwie nazwy kolumn, przez które przechodziłem do obiektu, ResultSet (getString("columnName"))które nie pasowały do ​​nazw kolumn w mojej bazie danych.

Nie jestem pewien, który z nich rozwiązał problem, ale zadziałał. Należy także pamiętać, że tworzenie nowego Statementi ResultSetdla każdego zapytania tabeli.


1
(1) z pewnością nie powoduje tego problemu.
— Markiz Lorne

0

Może to być prosty problem ze słoikiem. być może używasz starego, mysql-connector-java-XXX-bin.jarktóry nie jest obsługiwany przez twoją bieżącą wersję mysql. Użyłem mysql-connector-java-5.1.18-bin.jartak, jak używam mysql 5.5i ten problem został dla mnie rozwiązany.


1
Tak, może istnieć szansa na niedopasowanie słoika.
— Kiran Nunna

Wszystkie te wersje sterowników powinny być kompatybilne.
— Markiz Lorne

0

Być może nie uruchomiłeś serwera MySQL i Apache. Po uruchomieniu serwera Apache i MySQL z Panelu sterowania XAMPP połączenie zostało nawiązane.

Powodzenia!


0

Rozwiązaniem dla mnie jest zrobienie 2 rzeczy: 1. Stwórz nowego użytkownika innego niż root za pomocą hasła używając następujących konektorów:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. komentarz linia adresu IP na mysqld.conf

następnie połącz się z nową nazwą użytkownika i hasłem. powinno działać.


Powtórz to dla wszystkich zdalnych użytkowników lub dodaj symbol wieloznaczny zamiast Localhost
— OneCricketeer

0

Próbował połączyć się ze starszą wersją MySQL („wersja”, „5.1.73”); podczas korzystania z nowszej wersji sterownika pojawia się błąd, który mówi o użyciu pliku „com.mysql.cj.jdbc.Driver lub nawet nie musisz określać, którego używasz:

Ładowanie klasy com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '. Sterownik jest automatycznie rejestrowany za pomocą interfejsu SPI, a ręczne ładowanie klasy sterownika jest zasadniczo niepotrzebne.

Zmieniłem deklarację, aby użyć wersji 5.1.38 mysql-connector-java i, w kodzie, zachowałem com.mysql.jdbc.Driver .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Wszystko zaczęło się, kiedy zobaczyłem ankit Jain za odpowiedź


0

Mój firewall blokował post 3307, na którym nasłuchuje MySQL. Więc zmieniłem port z 3307 na 3306, a następnie mogę pomyślnie połączyć się z bazą danych.


0

W moim MacBooku rozwiązałem ten błąd tylko po ponownym zainstalowaniu nowej wersji Eclipse EE i usunięciu lokalnych serwerów, takich jak xamp mysql lub mamp, ale używam tylko jednego z nich ...


0

W moim przypadku musiałem założyć tunel ssh do zdalnej bazy danych i wszystkie ustawienia były prawidłowe, a testowanie połączenia z PhpStorm również zakończyło się powodzeniem. A także schemat został załadowany, ale nie dane. Zamiast tego dostałem:

[08S01] Communications link failure. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Żadna z powyższych sugestii nie zadziałała. Z jakiegokolwiek powodu próbowałem rozwiązać problem, po prostu ponownie uruchamiając PhpStorm i voila zadziałało!


0

Otrzymywałem wiele błędów, takich jak:

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at.

Musiałem dodać:

  • W AndroidManifest.xml dołącz <uses-permission android:name="android.permission.INTERNET"/>tuż po otwierającym tekście manifestu.

  • Dodaj sterownik JDBC do swoich zależności Gradle (lub Maven).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.