J'ai installé une installation mysql 5.5 standard, et bien que je puisse me connecter au service mysql via la commande mysql, et que le service semble être en cours d'exécution, je ne peux pas me connecter via spring + tomcat ou depuis un connecteur jdbc externe.
J'utilise l'URL suivante:
jdbc:mysql://myserver.com:myport/mydb
avec un nom d'utilisateur / mot de passe correct, mais je reçois le message suivant:
server.com: 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.
et tomcat jette:
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.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Ce qui semble être le même problème que si j'essaie de me connecter en externe.
Réponses:
Cela peut se produire pour diverses raisons. Je l'ai vu moi-même il y a quelques semaines, mais je ne me souviens pas de la solution pour moi.
1) Vérifiez que mysql est lié à l'adresse, c'est probablement 127.0.0.1 (uniquement) qui, je crois, est la valeur par défaut (au moins sur le serveur Ubuntu standard). Vous devrez commenter le paramètre bind-address dans my.cnf pour vous lier à toutes les adresses disponibles (vous ne pouvez pas en choisir plusieurs, c'est une ou toutes).
2) S'il est lié à 127.0.0.1 et que vous ne pouvez pas vous connecter à l'aide de "localhost", assurez-vous qu'il ne se résout pas à l'adresse IPv6 localhost au lieu d'IPv4. (ou utilisez simplement l'adresse IP)
3) Vérifiez et revérifiez le port sur lequel mysql écoute.
4) Assurez-vous que vous utilisez le bon connecteur JDBC pour votre JDK.
5) Assurez-vous que vous ne faites pas quelque chose de vraiment idiot comme démarrer mysql avec --skip-networking.
Je pense que ma première suggestion est la plus prometteuse ... en fait, je pense que c'est là que je l'ai vue récemment ... J'essayais de me connecter à mysql à distance (également sur Ubuntu 8.04).
la source
J'ai eu le même problème dans deux de mes programmes. Mon erreur était la suivante:
Je passe quelques jours pour résoudre ce problème. J'ai testé de nombreuses approches qui ont été mentionnées dans différents sites Web, mais aucune d'entre elles n'a fonctionné. Enfin, j'ai changé mon code et découvert quel était le problème. Je vais essayer de vous parler des différentes approches et de les résumer ici .
Alors que je cherchais Internet pour trouver la solution à cette erreur, j'ai compris qu'il existe de nombreuses solutions qui ont fonctionné pour au moins une personne, mais d'autres disent que cela ne fonctionne pas pour elles! pourquoi il existe de nombreuses approches à cette erreur? Il semble que cette erreur puisse se produire généralement en cas de problème de connexion au serveur . Le problème est peut-être dû à une chaîne de requête incorrecte ou à un trop grand nombre de connexions à la base de données.
Je vous suggère donc d'essayer toutes les solutions une par une et de ne pas abandonner!
Voici les solutions que j'ai trouvées sur internet et pour chacune d'elles, il y a au moins sur personne qui son problème a été résolu avec cette solution.
point: Pour les solutions dont vous avez besoin pour modifier les paramètres MySQL, vous pouvez vous référer à ce qui suit pas:
Linux: /etc/my.cnf
Windows: D: \ Program Files \ mysql \ bin \ my.ini
Voici les solutions:
Décommentez l'attribut "bind-address" ou remplacez-le par l'un des Ips suivants:
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, faites-la commenter en ajoutant le signe "#" au début de cette ligne.
Ajoutez ces lignes au fichier de configuration MySQL:
wait_timeout = nombre
interactive_timeout = nombre
connect_timeout = nombre
Assurez-vous que le pare-feu ou les logiciels antivirus ne bloquent pas le service MySQL.
Vérifiez votre chaîne de requête. votre chaîne de connexion devrait ressembler à ceci:
Assurez-vous que vous n'avez pas 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, comme 127.0.0.1. Essayez également d'ajouter un numéro de port à votre chaîne de connexion, comme:
Le port par défaut pour MySQL est généralement 3306.
N'oubliez pas de changer le nom d'utilisateur et le mot de passe en nom d'utilisateur et mot de passe de votre serveur MySQL.
" max_allowed_packet " est une variable du fichier de configuration MySQL qui indique la taille maximale des paquets, pas le nombre maximal de paquets. Il ne sera donc pas utile de résoudre cette erreur.
changer TOMCAT6_SECURITY = oui en TOMCAT6_SECURITY = non
utilisez validationQuery = "select now ()" pour vous assurer que chaque requête a des réponses
Ajoutez ce code à votre chaîne de connexion:
Bien qu'aucune de ces solutions n'ait fonctionné pour moi, je vous suggère de les essayer. Parce que certaines personnes ont résolu leur problème en suivant ces étapes.
Mais qu'est-ce qui a résolu mon problème? Mon problème était que j'avais de nombreux SELECT sur la base de données. Chaque fois, j'ai créé une connexion, puis je l'ai fermée. Bien que j'ai fermé la connexion à chaque fois, mais le système a fait face à de nombreuses connexions et m'a donné cette erreur. Ce que j'ai fait, c'est que j'ai défini ma variable de connexion comme une variable publique (ou privée) pour toute la classe et l'initialisé dans le constructeur. Ensuite, chaque fois que je viens d'utiliser cette connexion. Cela a résolu mon problème et a également considérablement augmenté ma vitesse.
Conclusion
Il n'existe aucun moyen simple et unique de résoudre ce problème. Je vous suggère de réfléchir à votre propre situation et de choisir les solutions ci-dessus. Si vous prenez cette erreur au début du programme et que vous ne parvenez pas du tout à vous connecter à la base de données, vous pouvez avoir un problème dans votre chaîne de connexion. Mais si vous prenez cette erreur après plusieurs interactions réussies avec la base de données, le problème pourrait être avec le nombre de connexions et vous pourriez penser à changer "wait_timeout" et d'autres paramètres MySQL ou réécrire votre code afin de réduire le nombre de connexions.
la source
Si vous exécutez une installation Linux, lokkit bloque probablement les communications entrantes, sauf via SSH.
Connectez-vous en tant que root et exécutez la commande lokkit à partir de l'invite, désactivez le pare-feu et SElinux et voyez si vous avez le même problème.
Vérifiez également que vos autorisations ont été définies correctement, afin que tout puisse écrire aux bons emplacements.
la source
Il y a aussi cet énorme bogue dans la version 5.1.9 du pilote mysql-jdbc:
http://bugs.mysql.com/bug.php?id=47494
la source
Cela peut également être dû à des paramètres de proxy incorrects . J'ai eu ce problème en essayant de me connecter via jdbc à une instance MySQL fonctionnant dans une appliance virtuelle Parallels sur mon Mac. La connexion jdbc utilise les paramètres réseau au niveau du système et comme j'étais derrière un proxy SOCKS, j'ai dû définir l'hôte MySql comme hôte non proxy (par exemple, sur un Mac, vous pouvez le configurer dans Paramètres-> Réseau-> Avancé- > Proxy, puis ajoutez le nom d'hôte ou l'adresse IP dans les "Paramètres de proxy de contournement pour ces hôtes et domaines").
la source
MySQL Connector / J prend uniquement en charge TCP / IP Java ne prend pas en charge la connectivité des sockets de domaine Unix
Si MYSQL est démarré avec l'indicateur de mise en réseau ou si MySQL s'exécute derrière le pare-feu, l'option TCP / IP est désactivée. Pour que Java ne puisse pas communiquer avec MySQL.
la source
j'ai eu un problème très similaire pendant presque une journée, et ça m'a rendu fou! mais j'ai réussi à trouver la solution, et c'était très, très simple, il suffit de /etc/init.d/tomcat6 pour changer TOMCAT6_SECURITY = yes en TOMCAT6_SECURITY = no. ce n'est pas ma solution, je l'ai trouvé ici , comme vous pouvez le voir, je lance Ubuntu, j'espère que cela fonctionne.
la source
J'ai eu le même problème. Modification de la propriété "bind-address" dans le fichier /etc/mysql/my.cnf à 0.0.0.0, et cela fonctionne. La ligne correspondante dans my.cnf ressemble à ceci:
bind-address = 0.0.0.0
Avant qu'il ne soit défini sur l'adresse IP extérieure du serveur, il ressemblait donc à quelque chose comme:
bind-address = 196.152.4.145
Je pense que lorsqu'il est défini sur l'adresse IP extérieure et non sur la boucle localhost, le serveur mysql est simplement connecté à la carte réseau et n'écoute pas les connexions de la boucle locale.
la source
essayez votre adresse locale pour lier l'adresse dans le fichier my.cnf
Connexion con = null;
la source