J'ai essayé de me connecter à ma base de données MySQL distante, mais j'ai échoué et cette erreur s'est produite.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
La confusion est que c'était efficace lorsque j'ai utilisé l'outil MySQL-Front pour connecter la base de données distante, et je peux cingler avec l'adresse IP avec succès. mais quand j'ai utilisé mon code, il a montré l'erreur au bout d'environ dix secondes.
De plus, lorsque j'ai utilisé un nom d'utilisateur ou un mot de passe incorrect dans mon code, la vérification incorrecte s'est immédiatement révélée erronée. Est-ce que cela prouve que l'installation de la connexion n'est pas un problème?
Voici mon code (il peut fonctionner sur ma base de données localhost):
public static void main(String[] args) {
String url = "jdbc:mysql://(IP address):3306/";
String dbName = "talk";
String driver = "com.mysql.jdbc.Driver";
String userName = "talkroot";
String password = "123456";
try {
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection(url + dbName,
userName, password);
System.out.println("connect");
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("end");
}
Voici l'erreur:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Last packet sent to the server was 0 ms ago.
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.Java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2120)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:723)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:46)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.Java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:282)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at com.test.TestMySQL.main(TestMySQL.Java:16)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Last packet sent to the server was 21298 ms ago.
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.Java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:1074)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.Java:3009)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.Java:2895)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:3438)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.Java:1951)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.Java:2101)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.Java:2548)
at com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.Java:1802)
at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.Java:3444)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2062)
... 12 more
Caused by: Java.net.SocketException: Software caused connection abort: recv failed
at Java.net.SocketInputStream.socketRead0(Native Method)
at Java.net.SocketInputStream.read(Unknown Source)
at Java.net.SocketInputStream.read(Unknown Source)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.Java:113)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.Java:160)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.Java:188)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.Java:2452)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.Java:2906)
... 20 more
Quelqu'un peut m'aider s'il vous plait?
Cette exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException se produit si votre connexion à la base de données est inactive pendant une longue période. Cette connexion inactive retourne vrai sur connection.isClosed (); mais si nous essayons d'exécuter une instruction, alors cette exception sera déclenchée, je vais donc suggérer d'utiliser le pooling de bases de données.
Généralement, cette erreur se produit lorsque vous n'utilisez pas le bon numéro de port. Peut être la machine qui travaille sur cette base de données (client'db) a un numéro de port différent. (Ex: 3307).
Allez dans le gestionnaire de tâches ==> Services ==> et vérifiez s'il existe une autre version de mysql. s'ils utilisent 3306, changez votre port en 3307.
mettez à jour votre version de lecteur pour:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.18</version>
Je l'ai résolu en supprimant le numéro de port de l'URL de connexion.
Donc, au lieu d'utiliser une chaîne de connexion comme:
jdbc:mysql://12x.xxx.xxx.xxx:1527/yourdbname
utilisation
jdbc:mysql://12x.xxx.xxx.xxx/yourdbname
Votre serveur MySQL n'est pas en cours d'exécution. Cochez la même chose dans la page des services du gestionnaire de tâches si vous utilisez Windows.
vous pouvez essayer de remplacer le fichier jar mysql-connector-Java-version.jar. Certaines personnes mettent à jour le fichier jar de 5.1.10 à 5.1.14, alors cela fonctionne. Je vous souhaite de la chance ..
Vérifiez les choses suivantes:
J'espère que cette information aide ...
De plus, lorsque j'ai utilisé un nom d'utilisateur ou un mot de passe incorrect dans mon code, la vérification incorrecte s'est immédiatement révélée erronée. Est-ce que cela prouve que l'installation de la connexion n'est pas un problème?
c'est probablement fait localement. donc, cela ne concerne pas pourquoi votre code ne fonctionne pas.
Il semble y avoir plusieurs façons de s'y prendre pour pouvoir essayer plusieurs choses. les gens ont résolu cet échec de lien de différentes manières selon leur propre situation:
Décommentez l'attribut "bind-address" ou remplacez-le par l'une des adresses IP suivantes:
bind-address = "127.0.0.1"
ou
bind-address = "0.0.0.0"
S'il y a une ligne "skip-networking" dans votre fichier de configuration MySQL, commentez-la en ajoutant le signe "#" au début de cette ligne.
Ajoutez ces lignes au fichier de configuration MySQL:
[wait_timeout] [1] = nombre
interactive_timeout = nombre
connect_timeout = nombre
Assurez-vous que les logiciels anti-feu ou anti-virus ne bloquent pas le service MySQL.
Vérifiez votre chaîne de requête. votre chaîne de connexion devrait ressembler à ceci:
dbName = "my_database";
dbUserName = "root";
dbPassword = "";
String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
Assurez-vous de ne pas avoir d'espaces dans votre chaîne. Toute la chaîne de connexion doit être continue sans aucun espace.
Essayez de remplacer "localhost" par votre port, par exemple 127.0.0.1 . Essayez également d’ajouter un numéro de port à votre chaîne de connexion, par exemple:
String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";
Le port par défaut pour MySQL est 3306.
N'oubliez pas de changer le nom d'utilisateur et mot de passe pour le nom d'utilisateur et mot de passe de votre serveur MySQL.
"[max_allowed_packet] [4]" est une variable dans le fichier de configuration MySQL qui indique la taille maximale de paquet, pas le nombre maximal de paquets. Donc, cela ne va pas aider à résoudre cette erreur.
remplacez Tomcat6_SECURITY = yes par Tomcat6_SECURITY = no
utilisez validationQuery = "select now ()" pour vous assurer que chaque requête a des réponses
Ajoutez ce code à votre chaîne de connexion:
&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
Veuillez mettre à jour votre fichier de configuration mysql dans le fichier /etc/mysql/my.cnf
Par défaut, MySQL n'autorise que les connexions à partir de l'adresse localhost. Le fichier de configuration se trouve généralement dans /etc/mysql/my.cnf
Vous voudrez commenter la ligne bind-address en lui donnant l'aspect suivant:
#bind-address = 127.0.0.1
Ensuite, vous devrez redémarrer le serveur de base de données:
Sudo /etc/init.d/mysql restart
Si vous travaillez avec une instance Amazon Ubuntu, vous devez suivre ces étapes: