com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication

226

Je travaille à faire parler ma base de données à mes programmes Java.

Quelqu'un peut-il me donner un exemple de programme rapide et sale en utilisant le JDBC?

Je reçois une erreur plutôt prodigieuse:

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

Contenu du fichier de test:

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?");
    }
}
Josh K
la source
17
J'étais stupide. Le serveur MySQL n'a pas été démarré :( Il a réussi après le démarrage.
akfaisel

Réponses:

252

Donc, vous avez un

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication
java.net.ConnectException: connexion refusée

Je cite cette réponse qui contient également un tutoriel MySQL + JDBC étape par étape:

Si vous obtenez un SQLException: Connection refusedou Connection timed outou un MySQL spécifique CommunicationsException: Communications link failure, cela signifie que la base de données n'est pas accessible du tout. Cela peut avoir une ou plusieurs des causes suivantes:

  1. L'adresse IP ou le nom d'hôte dans l'URL JDBC est incorrect.
  2. Le nom d'hôte dans l'URL JDBC n'est pas reconnu par le serveur DNS local.
  3. Le numéro de port est manquant ou incorrect dans l'URL JDBC.
  4. Le serveur DB est en panne.
  5. Le serveur DB n'accepte pas les connexions TCP / IP.
  6. Le serveur de base de données n'a plus de connexions.
  7. Quelque chose entre Java et DB bloque les connexions, par exemple un pare-feu ou un proxy.

Pour résoudre l'un ou l'autre, suivez les conseils suivants:

  1. Vérifiez-les et testez-les avec ping .
  2. Actualisez le DNS ou utilisez plutôt l'adresse IP dans l'URL JDBC.
  3. Vérifiez-le sur la base my.cnfde la base de données MySQL.
  4. Démarrez la base de données.
  5. Vérifiez si mysqld est démarré sans le --skip-networking option.
  6. Redémarrez la base de données et corrigez votre code en conséquence pour qu'il ferme les connexions finally.
  7. Désactivez le pare-feu et / ou configurez le pare-feu / proxy pour autoriser / transférer le port.

Voir également:

BalusC
la source
4
MAMP / MAMP Pro définit MAMP_skip-networking_MAMP par défaut. Vous devez désactiver cette ligne dans votre my.cfn
Jurik
6
Pas dans ce cas, mais une défaillance de la liaison de communication se produit également lorsque vous utilisez un pool de connexions et que les connexions sont fermées en raison d'une inactivité prolongée. Seulement dans ce cas, il est écrit "Le dernier paquet a été reçu il y a quelques" X "secondes"
nikel
@nikel Les threads du pool de connexions ne doivent-ils pas rester actifs en lançant la requête de validation "select 1"? Pourquoi seraient-ils fermés par une inactivité prolongée lorsque nous avons configuré l'expulseur pour qu'il s'exécute à des intervalles de temps plus courts que le délai d'expiration du serveur mysql?
Farhad
Oui, une requête de validation pourrait résoudre ce problème. Mon point concernait le cas où il n'est pas défini et les connexions dans la piscine sont expirées en raison de l'inactivité
nikel
Parfois, le port manque dans la chaîne de connexion et le pilote essaiera de se connecter au port mysql 3306 par défaut et échouera si mysql ne fonctionne pas sur ce port. C'était mon problème, donc je pense que je devrais mentionner au cas où quelqu'un d'autre le trouverait utile.
Abdul Mannan
10

J'attrape cette exception lorsque Java sort du tas. Si j'essaie de mettre en mémoire RAM de nombreux éléments de données, j'attrape d'abord « Échec de la liaison de communication » et ensuite « OutOfMemoryError ».

Je l'ai enregistré et je diminue la consommation de mémoire (supprimer 1/2 données) et tout va bien.

user1694306
la source
9

Dans mon cas, je devais remplacer Localhost par l'adresse IP réelle du serveur de base de données

Au lieu de

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

J'ai eu besoin

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
sureshAngamuthu
la source
Sur la dernière mise à jour 4/5/18: Actuellement, j'utilise MySQL Workbench 6.3. Je suis venu ici pour vérifier la solution mais je l'ai trouvée par moi-même, c'est juste que votre serveur MySQL ne fonctionne pas ou qu'il est arrêté. J'ai redémarré mon serveur, cela a fonctionné comme un charme.
Abhishek Ekaanth
7
C'est la «meilleure solution» pourquoi? Quel problème résout-il et comment?
Marquis de Lorne
cette solution ne peut pas générer de trames de données
Alan
8

Cette com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionexception se produit si votre connexion à la base de données est inactive pendant une longue période.

Cette connexion inactive renvoie true, connection.isClosed();mais si nous essayons d'exécuter une instruction, elle déclenchera cette exception, je proposerai donc de procéder au regroupement de bases de données.

Yogesh Funde
la source
2
Cela se produit également pour d'autres raisons telles que «connexion refusée».
Marquis de Lorne
6

J'ai le même problème depuis des heures. J'utilise MAMP Server

Au lieu d'utiliser localhost: [Port Apache], utilisez votre port MySQL.

Ci-dessous se trouve le port MySQL par défaut pour le serveur MAMP.

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

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
Abdul Rahim Mohamad
la source
si vous avez mamp avant d'installer Mysql alors essayez cette méthode
DAVIS BENNY 15MIS0426
5

Il se peut que j'aboie la mauvaise arborescence ici, mais votre exception semble indiquer que votre serveur MySQL n'est pas disponible.

Exception dans le thread "principal" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication Le dernier paquet envoyé avec succès au serveur était il y a 0 millisecondes. Le pilote n'a reçu aucun paquet du serveur. à...

Que se passe-t-il si vous essayez (depuis le terminal)

mysql -u username -p

Vous serez invité à entrer le mot de passe associé au nom d'utilisateur. Après avoir donné le bon mot de passe, le client mysql se connecte-t-il?

Sinon, vous devrez peut-être démarrer MySQL à partir des Préférences. Vous pouvez également le configurer pour qu'il s'exécute au démarrage.

Karl Walsh
la source
1
J'utilise MAMP pour exécuter mon serveur MySQL. Serait-ce un problème?
Josh K
Lorsque je me connecte (via Sequal Pro) à mon, localhostj'utilise le nom d'utilisateur / mot de passe correct et cela fonctionne très bien.
Josh K
5

Dans mon cas, il s'est avéré que la version de mysql-connector-javaétait trop ancienne.

Dans ma démo, j'utilise en quelque sorte mysql-connector-javacomme ceci:

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

Mais dans l'environnement de développement, j'utilise ceci:

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

Et ma version MySQL était 5.1.48 (oui, elle est ancienne, juste pour imiter la version du produit). J'ai donc rencontré la même erreur.

Puisque la raison est trouvée, la solution est également trouvée. Faites correspondre la version!

shellbye
la source
4
Improbable. Toutes ces versions de pilotes sont censées être rétrocompatibles.
Marquis de Lorne
1
Ce problème semble être résolu dans les nouveaux connecteurs mysql, voir stackoverflow.com/questions/14559794/…
Nishi
Le même cas pour moi. La version du pilote est pour MySQL 5 tandis que la version du serveur est 8. J'ai donc mis à jour la version du pot et le problème a été résolu.
edenPan
4

J'ai eu la même erreur car j'essayais d'exécuter mon programme sans démarrer le serveur mysql.

Après avoir démarré le serveur mysql, tout s'est bien passé.

rs2012
la source
4

Des réponses antérieures sont appropriées. Mais je voudrais également signaler une question plus générique.

J'ai rencontré un problème similaire et la raison était une restriction de réseau de mon entreprise.

La même connexion réussissait lorsque j'étais dans un autre réseau.

user3251882
la source
1
Ce pointeur a résolu mon problème, en spécifiant que «localhost» fonctionnait lorsque je me connecte au VPN, mais cela ne fonctionnait pas si je me déconnecte du VPN, mais j'ai résolu ce
problème
4

Veuillez mettre à jour votre adresse IP dans le fichier /etc/mysql/my.cnf

bind-address  = 0.0.0.0

Redémarrez le démon mysql et les services mysql.

Sreedhar GS
la source
1
Modifié pour utiliser une adresse de liaison valide
OneCricketeer
3

Téléchargez MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' from 'mysql-connector-java-5.1.11.zip') sur Mysql .

Vous devez inclure le fichier jar du pilote pendant la compilation et l'exécution dans votre chemin de classe.

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" );
gerbeur
la source
Non, me donne une tempête d'erreurs de ne rien trouver. Serait-il possible d'importer cela sans le fichier JAR?
Josh K
@Josh cela fonctionne, il vous suffit de configurer correctement votre chemin de classe. (Ou copiez le pot dans votre répertoire% JAVA_HOME% \ jre \ lib \ ext, mais cela est considéré comme une mauvaise pratique)
stacker
3

Cette erreur peut également se produire si Java essaie de se connecter à MySQL via SSL, mais quelque chose ne va pas. (Dans mon cas, je configurais des pools de connexions Payara Server 5.193.1 avec MySQL.)

Certaines personnes ont suggéré un réglage useSSL=false. Cependant, depuis la version Connector / J 8.0.13, ce paramètre est obsolète. Voici un extrait des propriétés de configuration de MySQL Connector / J 8.0 :

sslMode

Par défaut, les connexions réseau sont cryptées SSL; cette propriété permet de désactiver les connexions sécurisées ou de choisir différents niveaux de sécurité. Les valeurs suivantes sont autorisées: DISABLED- Etablir des connexions non cryptées; PREFERRED- (par défaut) Établissez des connexions cryptées si le serveur les a activées, sinon retombez sur des connexions non cryptées; REQUIRED- Etablir des connexions sécurisées si le serveur les a activées, sinon échouer; VERIFY_CA- J'aime REQUIREDmais vérifie en outre le certificat TLS du serveur par rapport aux certificats de l'autorité de certification (CA) configurés; VERIFY_IDENTITY- Comme VERIFY_CA, mais vérifiez en outre que le certificat de serveur correspond à l'hôte auquel la connexion est tentée.

Cette propriété a remplacé les propriétés héritées dépréciées useSSL, requireSSLet verifyServerCertificatequi sont toujours acceptées , mais traduit en une valeur sslModesi sslModeest pas explicitement définie: useSSL=falseest traduit sslMode=DISABLED;{"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}est traduit en sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}est traduit en sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}est traduit en sslMode=VERIFY_CA. Il n'y a pas de paramètres hérités équivalents pour sslMode=VERIFY_IDENTITY. Notez que, pour toutes les versions du serveur, le réglage par défaut sslModeest PREFERRED, et il est équivalent aux paramètres hérités de useSSL=true, requireSSL=falseetverifyServerCertificate=false, qui diffèrent de leurs paramètres par défaut pour Connector / J 8.0.12 et versions antérieures dans certaines situations. Les applications qui continuent d'utiliser les propriétés héritées et dépendent de leurs anciens paramètres par défaut doivent être examinées.

Les propriétés héritées sont ignorées si sslModeest défini explicitement. Si aucun de sslModeou useSSLn'est défini explicitement, le paramètre par défaut de sslMode=PREFERREDs'applique.

Par défaut :PREFERRED

Depuis la version : 8.0.13

Donc, dans mon cas, la configuration sslMode=DISABLEDétait tout ce dont j'avais besoin pour résoudre le problème. C'était sur une machine d'essai. Mais pour la production, la solution sécurisée serait de configurer correctement le client Java et le serveur MySQL pour utiliser SSL.


Notez qu'en désactivant SSL, vous devrez peut-être également définir allowPublicKeyRetrieval=true. (Encore une fois, pas une sage décision du point de vue de la sécurité). De plus amples informations sont fournies dans MySQL ConnectionString Options :

AllowPublicKeyRetrieval

Si le compte utilisateur utilise l' sha256_passwordauthentification, le mot de passe doit être protégé lors de la transmission; TLS est le mécanisme préféré pour cela, mais s'il n'est pas disponible, le cryptage à clé publique RSA sera utilisé. Pour spécifier la clé publique RSA du serveur, utilisez le ServerRSAPublicKeyFileparamètre de chaîne de connexion ou définissez-le AllowPublicKeyRetrieval=Truepour permettre au client de demander automatiquement la clé publique au serveur. Notez que cela AllowPublicKeyRetrieval=Truepourrait permettre à un proxy malveillant d'effectuer une attaque MITM pour obtenir le mot de passe en clair, il est donc faux par défaut et doit être explicitement activé.

MS Dousti
la source
Sujet pertinent de Payara Server GitHub .
MS Dousti
3

Mon même problème est résolu par les étapes suivantes:

  1. Aller à my.cnf

    vi /etc/mysql/my.cnf
  2. Modifier son adresse de liaison

    "bind-address = 0.0.0.0"
  3. Redémarrez MySQL

    sudo /etc/init.d/mysql restart
Haimei
la source
2

Si vous utilisez WAMPou un XAMPserveur pour installer la base de données mysql. Ensuite, vous devez démarrer explicitement mysql autrement, il s'affichera com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failurelors de la connexion à la base de données

xrcwrn
la source
2

j'ai résolu ce problème facilement, cela a fonctionné pour moi. j'ai eu le problème de seme "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication". Dans mon fichier db.properties, j'avais ceci: url: jdbc: mysql: // localhost: 90 / myDB, seulement supprimé l'URL du port, résultant de cette manière url: jdbc: mysql: // localhost / myDB et cela a fonctionné pour moi .

Dario Castro
la source
2

C'est ce qui m'est arrivé lorsque j'ai changé le port mysql de 3306 à 3307 dans my.ini et les fichiers php.ini mais après avoir changé les ports (3307-> 3306), cela a de nouveau fonctionné correctement.

MrPencil
la source
2

Si vous avez modifié votre port, vous obtenez ce type d'erreur "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication" Veuillez vérifier votre numéro de port

Maheshkumar.V
la source
1

Je viens de vivre cela.

Je dois le faire fonctionner par: (cela peut être placé dans l'initialiseur de bloc statique)

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

Aussi en obtenant la connexion via:

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

au lieu de spécifier les paramètres de connexion

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

Cordialement.

mel3kings
la source
2
Le bloc statique n'est plus nécessaire depuis 2007 et vous pouvez spécifier les paramètres de connexion dans les deux cas.
Marquis de Lorne
1

Essayez de passer localhostà 127.0.0.1.

L'hôte local serait résolu ::1. Et MySQL ne peut pas être connecté via IPv6 par défaut.

Et voici la sortie de telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

Et il n'y a aucune réponse du serveur MySQL.

Bien sûr, assurez-vous que votre serveur MySQL fonctionne.

Haozhe Xie
la source
C'est en fait un problème avec votre fichier / etc / hosts, pas Mysql
OneCricketeer
@ cricket_007 Par défaut, localhost est résolu en :: 1 au lieu de 127.0.0.1.
Haozhe Xie
1
Bien sûr, seulement si ipv6 est activé et en fonction du fichier 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);

si mysql version 8 ou supérieure mise à jour par le connecteur utilisateur

Ravinath
la source
c'est la bonne réponse, ajoutez simplement useSSL = false à la chaîne de connexion lorsque vous utilisez le pilote MySQL 8 ou supérieur.
Mohannd
1

Pour un appel à distance vers Mysql

  1. Ajouter un utilisateur distant à Mysql depuis par exemple 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. Autoriser l'accès à distance à Mysql (par défaut, tous les appels externes ne sont pas autorisés):

    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. Pour la dernière version du pilote JDBC, le 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'
Yugerten
la source
0

J'ai eu le même problème, et voici comment cela a été résolu:

  1. Mon .jsp appelait des attributs que je n'avais pas encore définis dans la servlet.
  2. J'avais deux noms de colonne que je transmettais à un objet ResultSet (getString("columnName"))ne correspondant pas aux noms de colonne dans ma base de données.

Je ne sais pas exactement lequel a résolu le problème, mais cela a fonctionné. Aussi, assurez - vous que vous créez une nouvelle Statementet ResultSetpour chaque requête de table.

user3427633
la source
1
(1) ne pose certainement pas ce problème.
Marquis de Lorne
0

Cela pourrait être un simple problème de pot. vous utilisez peut-être un ancien mysql-connector-java-XXX-bin.jarqui n'est pas pris en charge par votre version actuelle de mysql. J'ai utilisé mysql-connector-java-5.1.18-bin.jarcomme j'utilise mysql 5.5et ce problème est résolu pour moi.

Ankit Jain
la source
1
Oui, il peut y avoir un risque de non-concordance des pots.
Kiran Nunna
Toutes ces versions de pilotes sont censées être compatibles.
Marquis de Lorne
0

Vous n'avez peut-être pas démarré votre serveur Mysql et Apache. Après avoir démarré le serveur Apache et Mysql à partir du panneau de configuration XAMPP, la connexion a été établie avec succès.

Bonne chance!

shivam gupta
la source
0

Ce que j'ai résolu, c'est de faire 2 choses: 1. créer un nouvel utilisateur autre que root avec un mot de passe en utilisant les connads suivants:

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

2. commentez la ligne d'adresse IP sur mysqld.conf

puis connectez-vous avec un nouveau nom d'utilisateur et un nouveau mot de passe. ça devrait marcher.

Abdul Khalid
la source
Vous devrez répéter cela pour tous les utilisateurs distants ou ajouter un caractère générique au lieu de Localhost
OneCricketeer
0

Il essayait de se connecter à une ancienne version de MySQL ('version', '5.1.73'); lorsque vous utilisez une version de pilote plus récente, vous obtenez une erreur qui vous indique d'utiliser le pilote "com.mysql.cj.jdbc.Driver ou même que vous n'avez pas à spécifier lequel vous utilisez:

Chargement de la classe com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '. Le pilote est automatiquement enregistré via le SPI et le chargement manuel de la classe de pilote n'est généralement pas nécessaire.

J'ai changé la déclaration pour utiliser la version 5.1.38 de mysql-connector-java et, dans le code, j'ai conservé le com.mysql.jdbc.Driver .

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

Tout a commencé quand j'ai vu la réponse d' Ankit Jain

estellezg
la source
0

Mon pare-feu bloquait le post 3307 sur lequel mon écoute MySQL. J'ai donc changé le port de 3307 à 3306. Puis je peux me connecter avec succès à une base de données.

Michal Šípek
la source
0

Dans mon MacBook, je n'ai résolu cette erreur que lors de la réinstallation de la nouvelle version d'Eclipse EE et de la suppression des serveurs locaux comme xamp mysql ou mamp mais n'utilisez qu'un seul d'entre eux ...

m Piroli
la source
0

Dans mon cas, j'ai dû établir un tunnel ssh vers la base de données distante et tous les paramètres étaient corrects et le test de la connexion avec PhpStorm a également réussi. Et aussi le schéma a été chargé, mais pas les données. Au lieu de cela, j'ai eu:

[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.

Aucune des suggestions ci-dessus n'a fonctionné. Pour une raison quelconque, j'ai essayé de résoudre le problème en redémarrant simplement PhpStorm et le tour est joué!

Tech Nomad
la source
0

Je recevais plusieurs erreurs telles que:

  • 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.

J'ai dû ajouter:

  • Dans AndroidManifest.xml, insérez <uses-permission android:name="android.permission.INTERNET"/>juste après la balise manifeste d'ouverture.

  • Ajoutez le pilote JDBC dans vos dépendances Gradle (ou Maven).

Daniel Segura
la source