Connexion perdue au serveur MySQL lors de la 'lecture du paquet de communication initial', erreur système: 0

128

Je reçois une erreur:

"Connexion perdue au serveur MySQL lors de la 'lecture du paquet de communication initial, erreur système: 0"

pendant que je vais connecter mon db.

Si j'utilise localhost, tout fonctionne correctement. Mais lorsque j'utilise mon adresse IP en direct comme ci-dessous, une erreur s'affiche:

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

Réponses:

104

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 découvert que c'était mon pare-feu. J'utilise PCTools Firewall Plus et cela ne permettait pas un accès complet à MySQL. Une fois, j'ai changé que c'était bien. J'espère que cela pourra aider.

Serait-ce ça?

De plus, quelqu'un ici suggère que cela pourrait être dû au fait que le serveur MySQL est lié à l'IP de bouclage (127.0.0.1 / localhost) 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 que 'localhost'

Thomas Daugaard
la source
7
que voulez-vous dire localhost? Je suis également confronté au même problème et j'utilise uniquement localhost. L'application se trouve sur la même machine que la base de données. Que vouliez-vous dire localhost?
oneofakind
6
@oneofakind Il veut se connecter à 'localhost' au lieu de '127.0.0.1'
Alex Holsgrove
2
J'ai eu le même problème sur OSX avec mamp pro. Je l'ai corrigé en désactivant / réactivant la case à cocher "Autoriser l'accès réseau à mysql" dans l'onglet mysql de mamp pro.
Ousmane
43

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 en direct (l'adresse IP que vous utilisez dans la fonction mysql_connect)

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

Merci

intekhab rizvi
la source
2
Assurez-vous d'utiliser bind-address = 127.0.0.1 ou localhost lors de l'utilisation du tunnel ssh. J'ai eu ce problème avec bitnami, où l'adresse de liaison était l'adresse IP de la machine.
z2z
1
Le même problème et la même solution pour le serveur dédié autonome Debian 10 + MySQL.
Vilq le
Il convient de mentionner qu'il peut être généralement préférable de lier le service mysql au 127.0.0.1cas échéant, de sorte qu'un accès direct depuis d'autres hôtes n'est pas possible. Cela empêche les attaques par force brute à distance et n'expose pas d'éventuels problèmes de sécurité sur le réseau. Si votre application se trouve sur la même machine (ce qui est une configuration d'hébergement très courante), utilisez 127.0.0.1resp. localhosten tant qu'hôte mysql et cela fonctionnera de la même manière que la liaison du service à votre interface externe et son utilisation comme hôte mysql. Si votre application est située ailleurs, utilisez un réseau interne si possible.
David
36

1) Autorisez la connexion à distance à MySQL. Modifier 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éez 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. Je dois donc autoriser le port 3306 dans iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
sNICkerssss
la source
1
Pour moi, j'oublie de vérifier l'adresse de liaison sur my.cnf. Merci.
abkrim
1
Cela a totalement aidé. Je vous remercie!
osehgol
1
Fonctionnait parfaitement, mais j'utilisais Workbench sur Windows, donc je n'ai pas fait l'étape 3. mais cela a fonctionné. Merci!
RohitAneja
Bien que la dernière commande n'ait pas fonctionné pour moi, la création d'un nouvel utilisateur à votre guise a résolu mon problème. Je peux accéder à mysql sur raspberry pi depuis mon ordinateur portable. Merci!
Eyyüp Alkış
rappelez-vous FLUSH PRIVILEGESaprès avoir créé un nouvel utilisateur.
Yew Hong Tat le
15

Eu 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 serveur maître/etc/hosts.allow fichier du . Ajout de l'adresse IP et cela m'a permis de me connecter au serveur maître.

Notez que j'utilise hosts.allowet hosts.denypour contrôler l'accès.

marque
la source
mon problème avec le connecteur / c ++. maintenant, si je pouvais seulement trouver quel paramètre doit être allowquand denya ALL: ALL...
cela a vraiment sauvé ma vie, j'avais des problèmes de connexion à mysql depuis workbench, je devais ajouter "ALL: 127.0.0.1" au fichier /etc/hosts.allow et cela a commencé à fonctionner
Tomáš Tibenský
Dans mon cas, / etc / hosts avait une mauvaise (ancienne) entrée pour l'adresse IP de l'hôte. Lors de l'émission d'une nouvelle adresse IP, elle relevait de l'ancienne et était apparemment ignorée. La suppression de l'ancienne adresse IP a corrigé l'erreur.
David Ramirez
7

J'ai eu ce problème et cela a finalement été que l'administrateur système précédent avait changé le port sur lequel MySQL fonctionnait. MySQL Workbench essayait de se connecter au 3306 par défaut, mais le serveur fonctionnait sur 20300.

user3347295
la source
1
Bonne chose pour cette réponse. Il s'avère que je me suis fait ça à moi-même.
cautionbug
5

Le problème dans mon cas était que MySQL était lié uniquement au lo sous Linux. afin de résoudre le problème, j'ai édité le my.cnf (trouvé 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

Renato Mendes
la source
5

Cette erreur s'est produite lors de la tentative de connexion à Google Cloud SQL à l'aide de 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.

Paulo Occaso
la source
4

J'ai rencontré exactement la même erreur lors de la connexion à partir de MySQL Workbench. Voici comment je l'ai résolu. Mon fichier de configuration /etc/my.cnf avait la valeur d'adresse de liaison 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

par exemple

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. modifier la valeur du nom d'hôte MySQL dans les détails de connexion dans MySQL workbench pour qu'elle corresponde à l'adresse de liaison
Tishan
la source
Merci beaucoup, nous avons également eu une réplication MySQL et l'adresse de liaison était locale: 10.0.0.x. J'ai lutté pendant des jours pour cette solution.
iFadi
3

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

Bill Grady
la source
Je soupçonne que le DNS est également à blâmer dans mon cas.
Zenexer
3

Je viens de configurer mysql sur une boîte Windows. J'ai eu l'erreur de l'OP en essayant de me connecter avec le client Navicat MySql sur la même boîte. J'ai dû spécifier 127.0.0.1 comme hôte, et cela l'a obtenu.

localhost, ou l'adresse IP réelle du serveur ne fonctionnait pas.

Paul B
la source
3

L'erreur signifie qu'il n'a pas reçu de réponse du port sur lequel il s'attendait à trouver le serveur. Les causes vont du contact avec la mauvaise machine (pour l'une des nombreuses raisons) au serveur ne se trouvant 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. S'ils correspondent, essayez de vous connecter avec mysql depuis le serveur lui-même et depuis 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.

EffacerCrescendo
la source
Je ne pense pas que ce soit correct, s'il n'y a rien à écouter sur ce port, vous obtiendrez la réponse ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), pas le Lost connection to MySQL servermessage.
Ken Williams
2

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

domoarigato
la source
2

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. J'ai donc essayé de tunnel SSH sur le terminal:

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

Et ça m'a dit ceci:

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

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

Vérifiez donc votre utilisateur de connexion SSH.

J'ai supervisé cela, donc c'est trop une demi-heure de mon temps, alors j'espère que cela vous sera utile.

Arda
la source
2

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

Comme nous pouvons le voir ici: au lieu de sauter la mise en réseau, la valeur par défaut est maintenant d'écouter uniquement sur localhost qui est plus compatible et n'est pas moins sécurisé.

Scott
la source
Pour ma plus grande surprise, celui-ci a fonctionné sous Debian 10. J'ai donné une chance et FONCTIONNE! Edité config mysql sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfet au lieu de bind-address = 111.112.113.114je bind-address = 127.0.0.1. Les paramètres du tunnel SSH sont définis comme décrit sur hostpresto.com/community/tutorials/ ... Bon travail! Merci!
klor
1

Ran dans ce même problème, Bind Address d' avant en arrière en vain. La solution pour moi était de supprimer les privilèges .

mysql> FLUSH PRIVILEGES;
Marko Bajlovic
la source
1

Pour moi , la mise bind-address = 0.0.0.0enmysql/my.cnf fonctionné. Il écoute essentiellement toutes les adresses (mais toujours un port) alors.

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

Jahanzeb Khan
la source
6
Toutes les adresses / interfaces, mais un seul port.
Zenexer
1

J'ai juste eu le même problème, mais dans mon cas, je l'ai résolu avec

service mysqld start

GunSky7
la source
1

Une raison de plus ...

Je suis tombé sur 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

lewis4u
la source
1

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

Vérifiez d'abord votre appareil en courant nmcli devpour vérifier si l'appareil docker0est connecté.

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

sudo service docker restart

Belter
la source
1

Dans mon cas, c'était le port de blocage du wifi de l'université 3306. J'ai pu me connecter en utilisant un hotspot mobile.

Passez à un point d'accès mobile ou à un autre réseau, et si cela fonctionne là-bas, vous savez que le réseau d'origine bloque le port 3306. Si vous obtenez la même erreur sur plus d'un réseau, vous savez que c'est spécifique à votre machine.

R Diaz
la source
1

Firewalldbloque l'adresse IP. donc pour donner accès, utilisez ces commandes:

firewall-cmd --permanent --zone = confiance --add-source = VOTRE_IP / 32

firewall-cmd --permanent --zone = confiance --add-port = 3306 / tcp

pare-feu-cmd --reload

Rodniko
la source
0

Lors de la connexion à distance à Mysql, 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 /etc/hostsfichier:

X.X.X.X some_name

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

Amin Sh
la source
0

J'ai eu un problème identique. Pour y remédier, je viens de changer d'hôte de localhost: 3306 à juste localhost. Ainsi, une erreur peut survenir lorsque vous spécifiez un port incorrect pour la connexion. Il vaut mieux le laisser par défaut.

Barto
la source
1
Cela est probablement dû au fait que mysql n'accepte pas le port comme partie du nom d'hôte, vous devez à la place utiliser l'argument-P 3306
Clay H
0

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

Abbas
la source
0

J'ai fait face au 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 changé sshd_config ou my.cnf. Assurez-vous que le nom d'hôte ssh n'est PAS le même que le nom d'hôte mysql (utilisez localhost).

Dans Workbench, choisissez + pour ajouter une nouvelle connexion et définissez les paramètres suivants:

  • méthode de connexion: TCP / IP standard sur SSH
  • Nom d'hôte SSH: 192.168.0.50:22 (remplace l'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 réussir, puis appuyez sur OK.Viola!

Reagan Ochora
la source
0

Si l'adresse de liaison n'est pas présente dans votre fichier de configuration et que mysql est hébergé sur l'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 la règle sortante doit répondre à toutes les adresses IP valides.

Aman Bansal
la source
0

J'ai fait ci-dessous 3 étapes puis je travaille pour moi.

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

  2. Redémarrez le service par commande: service httpd restart

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

Kamal Oberoi
la source
0

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

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

  1. Pouvez-vous ssh directement du terminal au 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] ? Cela vérifiera les problèmes de droits des utilisateurs, etc.
  3. si les deux fonctionnent, 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'a jamais dit d'erreur de délai d'expiration, mais plutôt demandé de vérifier les autorisations, etc.)
Burges K
la source
0

Un espace disque limité peut provoquer cette erreur.

Vérifiez votre espace disque

$ df -h

Essayez d'augmenter l'espace s'il y a 100% de disques utilisés.

Dans mon cas: j'ai la boîte Vagrant (8.0.1) (Ubuntu 16.04) La capacité de mon disque mysql était de 10 Go, je l'ai augmentée à 20 Go

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

Puis redémarrez mysql

$ sudo service mysql restart
Sadee
la source
0

Si vous rencontrez cette erreur en vous connectant à distance, accédez à l'option mysql à distance dans cpanel, puis ajoutez% dans Host (% wildcard est autorisé).

John
la source