web-dev-qa-db-fra.com

Connexion perdue avec le serveur MySQL lors de la lecture du paquet de communication initial, erreur système:

Je reçois une erreur:

"Connexion perdue avec le serveur MySQL à la lecture du paquet de communication initial, erreur système: 0"

pendant que je vais connecter ma base de données.

Si j'utilise localhost, tout se passe bien . Mais lorsque j'utilise mon adresse IP réelle, comme ci-dessous, il y a erreur

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());
100
Rikesh

Quelqu'un ici suggère qu'il pourrait s'agir d'un problème de pare-feu:

Je viens d'avoir ce problème et j'ai trouvé que c'était mon pare-feu. J'utilise PCTools Firewall Plus et cela ne permettait pas un accès complet à MySQL. Une fois que j'ai changé ça c'était bien. J'espère que cela pourra aider.

Est-ce que ça pourrait être ça?

De plus, quelqu'un ici suggère que c'est peut-être parce que le serveur MySQL est lié à l'IP en boucle (127.0.0.1/localhost), ce qui vous empêche effectivement de vous connecter de "l'extérieur".

Si tel est le cas, vous devez télécharger le script sur le serveur Web (qui exécute probablement également le serveur MySQL) et conserver l'hôte de votre serveur en tant qu'hôte 'localhost'.

84
Thomas Daugaard

Ouvrez le fichier de configuration mysql nommé my.cnf et essayez de trouver "bind-address". Remplacez ici le paramètre (127.0.0.1 OR localhost) par votre adresse IP de serveur actif (l'adresse que vous utilisez dans la fonction mysql_connect).

Cela résoudra définitivement le problème.

Merci

37
intekhab rizvi

1) Autoriser la connexion à distance à MySQL . Editer le fichier:

>Sudo nano /etc/mysql/my.cnf

Ligne de commentaire:

#bind-address       = 127.0.0.1

Redémarrez MySQL:

>Sudo service mysql restart

2) Créer un utilisateur pour la connexion à distance.

>mysql -uroot -p

CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';

GRANT ALL ON *.* TO 'developer'@'localhost';
GRANT ALL ON *.* TO 'developer'@'%';

3) Dans mon cas, je dois me connecter à distance de Windows à la machine VirtualBox avec Ubuntu. J'ai donc besoin d'autoriser le port 3306 dans iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
20
sNICkerssss

Avait ce problème lors de la configuration d'un nouveau serveur esclave. Il a été trouvé que l'adresse IP du serveur esclave était absente du fichier /etc/hosts.allow du serveur maître. J'ai ajouté l'adresse IP et cela m'a permis de me connecter au serveur maître.

Notez que j'utilise hosts.allow et hosts.deny pour contrôler l'accès. 

15
Mark

J'ai eu ce problème et il s'est avéré que l'ancien administrateur système avait modifié le port sur lequel MySQL fonctionnait. MySQL Workbench essayait de se connecter au 3306 par défaut mais le serveur fonctionnait sous 20300.

7
user3347295

Le problème sur mon cas était que MySQL était lié uniquement au bas sur linux . Afin de résoudre le problème, j’ai édité le fichier my.cnf (disponible dans /etc/mysql/my.cnf) en supprimant la ligne bind-address = 127.0.0.1

cela permet à mysql de se lier à n’importe quelle interface réseau

5
Renato Mendes

Cette erreur s’est produite lors de la connexion à Google Cloud SQL avec MySQL Workbench 6.3.

Après quelques recherches, j'ai constaté que mon adresse IP avait été modifiée par le fournisseur d'accès Internet et qu'il n'était pas autorisé dans le Cloud SQL.

Je l'ai autorisé et suis retourné au travail.

5
Paulo Occaso

L'erreur signifie qu'il n'a pas reçu de réponse du port sur lequel il s'attend à trouver le serveur. Les causes peuvent aller du contact avec la mauvaise machine (pour plusieurs raisons) au fait que le serveur ne se trouve pas sur le port attendu.

Vérifiez le port auquel votre serveur est lié dans /etc/mysql/my.cnf. Cela correspond-il à ce qui se trouve dans votre déclaration de connexion? Si elles correspondent, essayez de vous connecter avec mysql à partir du serveur lui-même et de la ligne de commande de la machine sur laquelle vous exécutez le client. Si cela fonctionne à un endroit et pas à un autre, vous pouvez avoir un problème de configuration de pare-feu/routeur.

3
ClearCrescendo

Je viens d'installer mysql sur un windows box. L'erreur de l'OP s'est produite lors de la tentative de connexion au client Navicat MySql sur la même boîte. Je devais spécifier 127.0.0.1 en tant qu'hôte, et cela l'a compris.

localhost ou l'adresse IP réelle du serveur ne fonctionnent pas tous les deux.

3
Paul B

Le problème pour moi était que les requêtes DNS étaient bloquées par le FW au sein du sous-réseau. La solution consistait à désactiver les recherches DNS dans MySQL.

3
Bill Grady

Le problème était assez stupide pour moi.

J'avais l'habitude d'avoir le même problème sur la machine AWS EC2 Ubuntu (MariaDB est installée localement pour le moment), alors j'ai essayé de créer un tunnel SSH et j'ai eu le même problème. Alors j'ai essayé de ssh tunnel sur terminal:

ssh -L13306:127.0.0.1:3306 [email protected] -i my/private/key.pem

Et il m'a dit ceci:

Veuillez vous connecter en tant qu'utilisateur "Ubuntu" plutôt qu'en tant qu'utilisateur "root".

J'ai changé d'utilisateur ssh de root en ubuntu, tout comme ma configuration ssh, et tout s'est bien connecté.

Vérifiez donc votre utilisateur de connexion SSH.

J'ai surveillé cela, donc cela aussi une demi-heure de mon temps, donc j'espère que cela vous sera utile.

2
Arda

dans mon cas, j'avais ALL: ALL in hosts.deny. Changer ceci en ALL: PARANOID a résolu mon problème de connexion via ssh

2
domoarigato

Couru dans ce même problème, Bind Address aller-retour en vain. La solution pour moi était privilèges de chasse d'eau

mysql> FLUSH PRIVILEGES;
2
Marko Bajlovic

J'ai rencontré exactement la même erreur lors de la connexion à partir de MySQL Workbench. Voici comment je l'ai corrigé. Dans mon fichier de configuration /etc/my.cnf, la valeur de l'adresse de liaison était définie sur l'adresse IP du serveur. Cela devait être fait pour configurer la réplication. Quoi qu'il en soit, je l'ai résolu en faisant deux choses:

  1. créer un utilisateur pouvant être utilisé pour se connecter à partir de l'adresse de liaison dans le fichier my.cnf E.g. 

    CREATE USER 'nom_utilisateur' @ 'adresse_bind' IDENTIFIED BY 'mot_de_passe'; DONNER TOUT PRIVILEGES SUR nom_du_fichier. * TO 'nom_utilisateur' @ 'adresse_bien'; FLUSH PRIVILEGES;

  2. modifier la valeur du nom d'hôte MySQL dans les détails de connexion dans le plan de travail MySQL afin qu'elle corresponde à l'adresse de liaison

2
Tishan

Pour moi, le fichier de configuration "/etc/mysql/mysql.conf.d/mysqld.cnf" a été trouvé en commentant l'adresse de lien a fait l'affaire.

Comme on peut le voir ici: À la place de la gestion de réseau, la valeur par défaut consiste à n'écouter que sur localhost qui est plus compatible et n'est pas moins sécurisé.

1
scott

Pour moi, régler bind-address = 0.0.0.0 dans mysql/my.cnf a fonctionné. En gros, il écoute toutes les adresses (mais toujours un port).

Et n'oubliez pas de redémarrer votre serveur: systemctl restart mysql

1
Jahanzeb Khan

Je viens d'avoir le même problème, mais dans mon cas, je l'ai résolu avec

service mysqld start

1
GunSky7

Lors de la connexion à Mysql à distance, j'ai eu l'erreur . J'ai eu cet avertissement dans /var/log/mysqld.log:

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

Je viens d'ajouter cette ligne au fichier /etc/hosts:

X.X.X.X some_name

Problème résolu! Ne pas utiliser skip-name-resolve a provoqué des erreurs dans mon application locale lors de la connexion à MySQL.

0
Amin Sh

J'ai eu une erreur similaire (connexion à MYSQL sur aws via MYSql Workbench). J'avais l'habitude de me connecter correctement avant et tout d'un coup, il a cessé de fonctionner et ne fonctionne plus, il ne fonctionne plus. Ma connexion était via SSH protégé par keyfile.

Il s'est avéré que je m'arrêtais. J'ai donc augmenté le délai d'expiration de la connexion SQL à 30 secondes (à partir de 10 par défaut) et j'étais prêt à recommencer. choses à essayer (si vous êtes dans une configuration similaire)

  1. Pouvez-vous SSH directement du terminal sur le serveur (détecte les problèmes avec les autorisations de fichiers clés, etc.)?
  2. Pouvez-vous ensuite, via le terminal, vous connecter à MySQL avec le même utilisateur/pwd en utilisant quelque chose comme mysql -u [username] -p [database]? Ceci vérifiera les problèmes de droits d'utilisateur, etc.
  3. si les deux fonctionnent, alors vos paramètres ne sont pas le problème et peut-être le même problème de délai d'expiration que moi (sauf qu'il n'y a jamais eu d'erreur de dépassement de délai, mais plutôt de vérifier les autorisations, etc.)
0
Burges K

L'autorisation de lecture-écriture du répertoire de base de données est également un problème que j'ai rencontré . Assurez-vous simplement que votre application est capable de rw les fichiers sur l'emplacement de la base de données Essayez chmod 777 pour les tests.

0
Abbas

Si bind-address n'est pas présent dans votre fichier de configuration et que mysql est hébergé sur une instance AWS, veuillez vérifier votre groupe de sécurité. Dans des conditions idéales, les règles entrantes doivent accepter toutes les connexions du port 3306 et les règles sortantes doivent répondre à toutes les adresses IP valides.

0
Aman Bansal

J'essaie de connecter mon db docker container sur Ubuntu 18.04, même problème.

Commencez par vérifier votre périphérique en exécutant nmcli dev pour vérifier si le périphérique docker0 est connecté.

S'il n'est pas connecté, essayez de redémarrer le service Docker:

Sudo service docker restart

0
Belter

J'ai fait ci-dessous 3 étapes alors travailler pour moi.

  1. bind-address = "YOUR MACHINE IP" dans le fichier my.cnf à /etc/my.cnf

  2. Redémarrer le service avec la commande: service httpd restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YPUR_PASSWORD' WITH GRANT OPTION;

0
Kamal Oberoi

J'ai eu le même problème. Pour résoudre ce problème, je viens de changer hôte de localhost: 3306 en localhost. Donc, une erreur peut survenir lorsque vous séparez un port incorrect pour la connexion. Il vaut mieux laisser le défaut. 

0
Barto

Une raison de plus ...

J'ai rencontré un serveur Ubuntu où tout était personnalisé et ne pouvait pas se connecter à cause de la même erreur.

Ce paramètre était à l'intérieur /etc/ssh/sshd_config

PermitTunnel no

Après être devenu

PermitTunnel yes

J'ai pu me connecter à distance à ma base de données MySQL

0
lewis4u

J'ai rencontré le même problème. J'ai vérifié et essayé de définir AllowTcpForwarding Oui mais il manquait dans mon sshd_config, donc aucune aide. Je n'ai pas modifié sshd_config ou my.cnf. Assurez-vous que le nom d’hôte ssh estPASidentique avec le nom d’hôte mysql (utilisez localhost).

Dans Workbench, choisissez + pour ajouter une nouvelle connexion et définissez les éléments suivants:

  • méthode de connexion: standard TCP/IP sur SSH  
  • Nom d'hôte SSH: 192.168.0.50:22 (remplace l'adresse IP et le port du serveur SSH distant (facultatif)) 
  • Nom d'utilisateur SSH: sshuser  
  • Vous pouvez définir un mot de passe ou ajouter à l'invite
  • Nom d'hôte MYSQL: localhost ou 127.0.0.1
  • Port du serveur MYSQL: 3306
  • Vous pouvez définir un mot de passe ou ajouter à l'invite

Tester la connexion. Cela devrait être réussi, puis cliquez sur OK.Viola!

0
Reegan Ochora

Le pare-feu Apache bloque l'adresse IP. donc pour donner accès, utilisez ces commandes:

firewall-cmd --permanent --zone = digne de confiance --add-source = YOUR_IP/32

firewall-cmd --permanent --zone = sécurisé --add-port = 3306/tcp

firewall-cmd --reload

0
Rodniko