Verbindung zum MySQL-Server beim Lesen des ersten Kommunikationspakets unterbrochen, Systemfehler: 0

127

Ich erhalte eine Fehlermeldung:

"Verbindung zum MySQL-Server beim Lesen des ersten Kommunikationspakets unterbrochen, Systemfehler: 0"

während ich meine db verbinden werde.

Wenn ich localhost benutze, funktioniert alles einwandfrei. Wenn ich jedoch meine Live-IP-Adresse wie unten verwende, wird folgende Fehlermeldung angezeigt:

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

Antworten:

104

Jemand hier schlägt vor, dass es sich möglicherweise um ein Firewall-Problem handelt:

Ich hatte gerade dieses Problem und stellte fest, dass es meine Firewall war. Ich verwende PCTools Firewall Plus und es war kein vollständiger Zugriff auf MySQL möglich. Sobald ich das geändert habe, war es in Ordnung. Hoffentlich hilft das.

Könnte das sein?

Außerdem schlägt hier jemand vor , dass dies möglicherweise daran liegt, dass der MySQL-Server an die Loopback-IP (127.0.0.1 / localhost) gebunden ist, wodurch Sie effektiv von der Verbindung von "außen" ausgeschlossen werden.

In diesem Fall müssen Sie das Skript auf den Webserver hochladen (auf dem wahrscheinlich auch der MySQL-Server ausgeführt wird) und Ihren Server-Host als 'localhost' behalten.

Thomas Daugaard
quelle
7
Was meinst du mit localhost? Ich stehe auch vor dem gleichen Problem und benutze nur localhost auch. Die Anwendung befindet sich auf demselben Computer wie die Datenbank. Was meintest du mit localhost?
oneofakind
6
@oneofakind Er bedeutet, eine Verbindung zu 'localhost "anstelle von' 127.0.0.1 'herzustellen
Alex Holsgrove
2
Ich hatte das gleiche Problem unter OSX mit mamp pro. Ich habe das Problem behoben, indem ich das Kontrollkästchen "Netzwerkzugriff auf MySQL zulassen" auf der Registerkarte "Mamp Pro MySQL" deaktiviert / wieder aktiviert habe.
Ousmane
43

Öffnen Sie die MySQL-Konfigurationsdatei mit dem Namen my.cnf und versuchen Sie, die "Bindungsadresse" zu finden. Ersetzen Sie hier die Einstellung (127.0.0.1 ODER localhost) durch Ihre Live-Server-IP (die IP, die Sie in der Funktion mysql_connect verwenden).

Dies wird das Problem definitiv lösen.

Vielen Dank

intekhab rizvi
quelle
2
Stellen Sie sicher, dass Sie bind-address = 127.0.0.1 oder localhost verwenden, wenn Sie den ssh-Tunnel verwenden. Hatte dieses Problem mit Bitnami, wo die Bindungsadresse die Maschinen-IP war.
z2z
1
Das gleiche Problem und die gleiche Lösung für den eigenständigen dedizierten Debian 10 + MySQL-Server.
Vilq
Es sollte erwähnt werden, dass es im Allgemeinen vorzuziehen ist, den MySQL-Dienst gegebenenfalls zu binden, 127.0.0.1sodass ein direkter Zugriff von anderen Hosts nicht möglich ist. Dies verhindert Remote-Brute-Force-Angriffe und stellt dem Netzwerk keine möglichen Sicherheitsprobleme zur Verfügung. Wenn sich Ihre Anwendung auf demselben Computer befindet (was ein sehr verbreitetes Hosting-Setup ist), verwenden Sie 127.0.0.1resp. localhostals MySQL-Host und es funktioniert genauso wie das Binden des Dienstes an Ihre externe Schnittstelle und das Verwenden dieses als MySQL-Host. Wenn sich Ihre Anwendung an einem anderen Ort befindet, verwenden Sie nach Möglichkeit ein internes Netzwerk.
David
35

1) Remoteverbindung mit MySQL zulassen. Datei bearbeiten:

>sudo nano /etc/mysql/my.cnf

Kommentarzeile:

#bind-address       = 127.0.0.1

Starten Sie MySQL neu:

>sudo service mysql restart

2) Erstellen Sie einen Benutzer für die Remoteverbindung.

>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) In meinem Fall muss ich mit Ubuntu eine Remoteverbindung von Windows zu VirtualBox herstellen. Also muss ich Port 3306 in iptables zulassen:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
sNICkerssss
quelle
1
Für mich vergesse ich, die Bindeadresse auf my.cnf zu überprüfen. Vielen Dank.
Abkrim
1
Das hat total geholfen. Danke dir!
Osehgol
1
Hat perfekt funktioniert, aber ich habe Workbench unter Windows verwendet, also habe ich Schritt 3 nicht gemacht, aber es hat funktioniert. Vielen Dank!
RohitAneja
Obwohl der letzte Befehl bei mir nicht funktioniert hat, hat das Erstellen eines neuen Benutzers auf Ihre Weise mein Problem gelöst. Ich kann von meinem Laptop auf MySQL auf Himbeer-Pi zugreifen. Vielen Dank!
Eyyüp Alkış
Denken Sie daran, FLUSH PRIVILEGESnach dem Erstellen eines neuen Benutzers.
Yew Hong Tat
15

Hatte dieses Problem beim Einrichten eines neuen Slave-Servers. Es wurde festgestellt, dass die IP-Adresse des Slave-Servers in der Master-Server- /etc/hosts.allowDatei fehlte . Die IP-Adresse wurde hinzugefügt und ich konnte eine Verbindung zum Master-Server herstellen.

Beachten Sie, dass ich den Zugriff verwende hosts.allowund hosts.denykontrolliere.

Kennzeichen
quelle
Mein Problem mit Connector / C ++. Nun, wenn ich nur herausfinden könnte, in welcher Einstellung allowwann sein denymuss ALL: ALL...
Das sparte wirklich mein Leben, ich Probleme von Werkbank zu mysql Verbindungs hatte, musste ich „ALL: 127.0.0.1“ hinzufügen , um /etc/hosts.allow-Datei und es begann zu arbeiten
Tomáš Tibenský
In meinem Fall hatte / etc / hosts einen schlechten (alten) Eintrag für die Host-IP. Als eine neue IP ausgestellt wurde, fiel sie unter die alte und wurde anscheinend ignoriert. Durch Löschen der alten IP wurde der Fehler behoben.
David Ramirez
7

Ich hatte dieses Problem und es endete damit, dass der vorherige Systemadministrator den Port geändert hat, auf dem MySQL ausgeführt wurde. MySQL Workbench hat versucht, eine Verbindung zum Standard 3306 herzustellen, aber der Server wurde auf 20300 ausgeführt.

user3347295
quelle
1
Gut für diese Antwort. Es stellte sich heraus, dass ich mir das angetan habe.
Vorsicht Bug
5

Das Problem in meinem Fall war, dass MySQL nur unter Linux an lo gebunden wurde. Um das Problem zu lösen, habe ich die my.cnf (gefunden unter /etc/mysql/my.cnf) bearbeitet und die Zeile bind-address = 127.0.0.1 entfernt

Dadurch kann MySQL an jede Netzwerkschnittstelle gebunden werden

Renato Mendes
quelle
5

Dieser Fehler ist mir beim Versuch aufgetreten, mit MySQL Workbench 6.3 eine Verbindung zu Google Cloud SQL herzustellen.

Nach ein wenig Recherche stellte ich fest, dass meine IP-Adresse vom Internetprovider geändert wurde und er nicht in Cloud SQL zugelassen wurde.

Ich autorisierte es und machte mich wieder an die Arbeit.

Paulo Occaso
quelle
4

Bei der Verbindung von der MySQL-Workbench ist genau derselbe Fehler aufgetreten. Hier ist, wie ich es behoben habe. In meiner Konfigurationsdatei /etc/my.cnf wurde der Wert für die Bindeadresse auf die IP-Adresse des Servers festgelegt. Dies musste durchgeführt werden, um die Replikation einzurichten. Wie auch immer, ich habe es gelöst, indem ich zwei Dinge getan habe:

  1. Erstellen Sie einen Benutzer, mit dem eine Verbindung über die Bindungsadresse in der Datei my.cnf hergestellt werden kann

z.B

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. Ändern Sie den Wert für den MySQL-Hostnamen in den Verbindungsdetails in der MySQL-Workbench so, dass er mit der Bindungsadresse übereinstimmt
Tishan
quelle
Vielen Dank, wir hatten auch MySQL-Replikation und die Bindungsadresse war eine lokale: 10.0.0.x. Ich habe tagelang um diese Lösung gekämpft.
iFadi
3

Das Problem für mich war, dass DNS-Abfragen von der FW innerhalb des Subnetzes blockiert wurden. Die Lösung bestand darin, DNS-Lookups in MySQL zu deaktivieren.

Bill Grady
quelle
Ich vermute, dass auch in meinem Fall DNS schuld ist.
Zenexer
3

Ich habe gerade MySQL auf einer Windows-Box eingerichtet. Beim Versuch, eine Verbindung mit dem Navicat MySql-Client auf derselben Box herzustellen, wurde der OP-Fehler angezeigt. Ich musste 127.0.0.1 als Host angeben, und das hat es geschafft.

localhost oder die tatsächliche IP-Adresse des Servers funktionierten nicht.

Paul B.
quelle
3

Der Fehler bedeutet, dass er keine Antwort von dem Port erhalten hat, an dem der Server erwartet wurde. Die Ursachen reichen von der Kontaktaufnahme mit dem falschen Computer (aus einer Reihe von Gründen) bis hin zum Server, der sich nicht am erwarteten Port befindet.

Überprüfen Sie in /etc/mysql/my.cnf, an welchen Port Ihr Server gebunden ist. Entspricht das dem, was in Ihrer connect-Anweisung steht? Wenn sie übereinstimmen, versuchen Sie, über den Server selbst und über die Befehlszeile des Computers, auf dem Sie den Client ausführen, eine Verbindung mit MySQL herzustellen. Wenn es an einem Ort und nicht an einem anderen funktioniert, liegt möglicherweise ein Problem mit der Firewall- / Routerkonfiguration vor.

ClearCrescendo
quelle
Ich denke nicht, dass dies richtig ist. Wenn an diesem Port nichts abgehört wird, erhalten Sie die Antwort ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), nicht die Lost connection to MySQL serverNachricht.
Ken Williams
2

In meinem Fall hatte ich ALL: ALL in hosts.deny. Ändern Sie dies in ALL: PARANOID hat mein Problem beim Verbinden über ssh gelöst

domoarigato
quelle
2

Das Problem war ziemlich dumm für mich.

Ich hatte das gleiche Problem auf dem AWS EC2 Ubuntu-Computer (MariaDB ist derzeit lokal installiert), also habe ich versucht, SSH-Tunneling durchzuführen, und hatte das gleiche Problem. Also habe ich versucht, Tunnel über Terminal zu ssh:

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

Und es sagte mir Folgendes:

Bitte melden Sie sich als Benutzer "ubuntu" und nicht als Benutzer "root" an.

Ich habe den ssh-Benutzer von root auf ubuntu geändert, genau wie meine ssh-Konfiguration, und die Verbindung ist einwandfrei.

Überprüfen Sie also Ihren SSH-Verbindungsbenutzer.

Ich habe das beaufsichtigt, also auch diese halbe Stunde meiner Zeit, also hoffe ich, dass dies für Sie nützlich sein wird.

Arda
quelle
2

Für mich wurde die Konfigurationsdatei "/etc/mysql/mysql.conf.d/mysqld.cnf" gefunden. Das Auskommentieren der Bindungsadresse hat den Trick getan.

Wie wir hier sehen können: Anstatt das Netzwerk zu überspringen, wird jetzt standardmäßig nur noch localhost abgehört, das kompatibler und nicht weniger sicher ist.

Scott
quelle
Zu meiner größten Überraschung arbeitete dieser unter Debian 10. Ich gab eine Chance dafür und ARBEITET! MySQL-Konfiguration bearbeitet sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfund stattdessen bind-address = 111.112.113.114verwendet bind-address = 127.0.0.1. Die SSH-Tunneleinstellungen werden wie unter hostpresto.com/community/tutorials/… beschrieben festgelegt. Gute Arbeit! Vielen Dank!
Klor
1

Ist auf dasselbe Problem gestoßen, Adresse ohne Erfolg hin und her binden. Die Lösung für mich war das Löschen von Berechtigungen .

mysql> FLUSH PRIVILEGES;
Marko Bajlovic
quelle
1

Für mich Einstellung bind-address = 0.0.0.0in mysql/my.cnfgearbeitet. Grundsätzlich werden dann alle Adressen (aber immer noch ein Port) abgehört.

Und vergessen Sie nicht, Ihren Server neu zu starten: systemctl restart mysql

Jahanzeb Khan
quelle
6
Alle Adressen / Schnittstellen, aber nur ein Port.
Zenexer
1

Ich hatte nur das gleiche Problem, aber in meinem Fall habe ich es mit gelöst

Service mysqld starten

GunSky7
quelle
1

Noch ein Grund ...

Ich bin auf einen Ubuntu-Server gestoßen, auf dem alles angepasst wurde und wegen des gleichen Fehlers keine Verbindung hergestellt werden konnte.

Diese Einstellung war drinnen /etc/ssh/sshd_config

PermitTunnel no

Nach dem Einbiegen in

PermitTunnel yes

Ich konnte eine Remoteverbindung mit meiner MySQL-Datenbank herstellen

lewis4u
quelle
1

Ich versuche, meinen DB Docker Container unter Ubuntu 18.04 zu verbinden, das gleiche Problem.

Überprüfen Sie zuerst Ihr Gerät durch Ausführen, nmcli devum festzustellen, ob das Gerät docker0angeschlossen ist.

Wenn keine Verbindung besteht, versuchen Sie, den Docker-Dienst neu zu starten:

sudo service docker restart

Belter
quelle
1

In meinem Fall war es der WLAN-Sperrport 3306 der Universität. Ich konnte über einen mobilen Hotspot eine Verbindung herstellen.

Wechseln Sie zu einem mobilen Hotspot oder einem anderen Netzwerk. Wenn es dort funktioniert, wissen Sie, dass das ursprüngliche Netzwerk Port 3306 blockiert. Wenn in mehr als einem Netzwerk derselbe Fehler auftritt, wissen Sie, dass er für Ihren Computer spezifisch ist.

R Diaz
quelle
1

Firewalldblockiert die IP-Adresse. Verwenden Sie die folgenden Befehle, um Zugriff zu gewähren:

firewall-cmd --permanent --zone = vertrauenswürdig --add-source = YOUR_IP / 32

firewall-cmd --permanent --zone = vertrauenswürdig --add-port = 3306 / tcp

firewall-cmd --reload

Rodniko
quelle
0

Bei der Remoteverbindung mit MySQL wurde der Fehler angezeigt. Ich hatte diese Warnung in /var/log/mysqld.log:

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

Ich habe gerade diese Zeile zur /etc/hostsDatei hinzugefügt :

X.X.X.X some_name

Problem gelöst! Die Nichtverwendung skip-name-resolveverursachte einige Fehler in meiner lokalen App, wenn eine Verbindung zu MySQL hergestellt wurde.

Amin Sh
quelle
0

Ich hatte das gleiche Problem. Um das Problem zu beheben, habe ich gerade den Host von localhost: 3306 in localhost geändert. Daher kann ein Fehler auftreten, wenn Sie einen nicht ordnungsgemäßen Port für die Verbindung trennen. Es ist besser, die Standardeinstellung beizubehalten.

Barto
quelle
1
Dies ist wahrscheinlich, weil MySQL den Port nicht als Teil des Hostnamens akzeptiert, stattdessen müssen Sie das Argument verwenden-P 3306
Clay H
0

Datenbankverzeichnis Lese- / Schreibberechtigung auch ein Problem, das ich gefunden habe. Stellen Sie einfach sicher, dass Ihre Anwendung Dateien am Datenbankspeicherort rw kann. Probieren Sie chmod 777 zum Testen aus.

Abbas
quelle
0

Ich hatte das gleiche Problem. Ich habe AllowTcpForwarding überprüft und versucht, Ja zu setzen, aber es fehlte in meiner sshd_config, also keine Hilfe. Ich habe weder sshd_config noch my.cnf geändert. Stellen Sie sicher, dass der ssh-Hostname NICHT mit dem mysql-Hostnamen übereinstimmt (verwenden Sie localhost).

Wählen Sie in der Workbench +, um eine neue Verbindung hinzuzufügen, und legen Sie Folgendes fest:

  • Verbindungsmethode: Standard TCP / IP über SSH
  • SSH-Hostname: 192.168.0.50:22 (IP und Port des Remote-SSH-Servers ersetzen (optional))
  • SSH-Benutzername: sshuser
  • Sie können das Passwort festlegen oder an der Eingabeaufforderung hinzufügen
  • MYSQL-Hostname: localhost oder 127.0.0.1
  • MYSQL Server-Port: 3306
  • Sie können das Passwort festlegen oder an der Eingabeaufforderung hinzufügen

Testverbindung. Es sollte erfolgreich sein, dann drücken Sie OK.Viola!

Reagan Ochora
quelle
0

Wenn die Bindungsadresse in Ihrer Konfigurationsdatei nicht vorhanden ist und MySQL auf einer AWS-Instanz gehostet wird, überprüfen Sie bitte Ihre Sicherheitsgruppe. Unter idealen Bedingungen sollten die eingehenden Regeln alle Verbindungen von Port 3306 akzeptieren und die ausgehenden Regeln sollten auf alle gültigen IPs antworten.

Aman Bansal
quelle
0

Ich habe unten 3 Schritte gemacht und dann für mich gearbeitet.

  1. bind-address = "YOUR MACHINE IP"in der my.cnfDatei unter /etc/my.cnf

  2. Starten Sie den Dienst mit dem Befehl neu: service httpd restart

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

Kamal Oberoi
quelle
0

Ich hatte einen ähnlichen Fehler (Verbindung zu MYSQL auf aws über MYSql Workbench). Früher habe ich mich gut verbunden und plötzlich funktionierte es nicht mehr und funktionierte einfach nicht mehr. Meine Verbindung war über SSH durch eine Schlüsseldatei geschützt.

Es stellte sich heraus, dass ich eine Zeitüberschreitung hatte. Also habe ich das Zeitlimit für die SQL-Verbindung von Standard 10 auf 30 Sekunden erhöht und konnte loslegen. Dinge zu versuchen (wenn Sie in einem ähnlichen Setup sind)

  1. Können Sie direkt vom Terminal zum Server ssh (erkennt Probleme mit Schlüsseldateiberechtigungen usw.)?
  2. Können Sie dann über das Terminal mit demselben Benutzer / pwd eine Verbindung zu MySQL herstellen? mysql -u [username] -p [database] ? Dadurch wird nach Problemen mit Benutzerrechten usw. gesucht.
  3. Wenn beide funktionieren, sind Ihre Parameter nicht das Problem und möglicherweise das gleiche Timeout-Problem wie ich (außer es wurde nie ein Timeout-Fehler angegeben, sondern Sie werden gebeten, nach Berechtigungen usw. zu suchen).
Burges K.
quelle
0

Begrenzter Speicherplatz kann zu diesem Fehler führen.

Überprüfen Sie Ihren Speicherplatz

$ df -h

Versuchen Sie, den Speicherplatz zu vergrößern, wenn 100% der Festplatten verwendet werden.

In meinem Fall: Ich habe eine Vagrant (8.0.1) Box (Ubuntu 16.04). Meine MySQL-Festplattenkapazität betrug 10 GB, ich habe sie auf 20 GB erhöht

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

Starten Sie dann MySQL neu

$ sudo service mysql restart
Sadee
quelle
0

Wenn Sie auf diesen Fehler stoßen, indem Sie eine Verbindung von der Fernbedienung herstellen, gehen Sie zur Remote-MySQL-Option in cpanel und fügen Sie% in Host hinzu (% Platzhalter ist zulässig).

John
quelle