Remote-Verbindungen MySQL Ubuntu

95

Aus irgendeinem Grund konnte ich keine Remoteverbindung zu meinem MySQL-Server herstellen. Ich habe alles versucht und bekomme immer noch Fehler.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Jetzt habe ich versucht zu rennen

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

und immer noch nichts! Was mache ich falsch?

BEARBEITEN : my.cnfhat die Bindungs-IP auskommentiert.

Cristian Eduardo Lehuede Lyon
quelle
Welche Version von MySQL verwenden Sie?
Steve
Serverversion: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lyon
Was gibt dieser Befehl zurück? ubuntu ~ $ sudo lsof -i -P | grep: 3306
Apesa

Antworten:

345

Um MySQL etwas anderem als localhost auszusetzen, muss die folgende Zeile angezeigt werden

Für MySQL Version 5.6 und niedriger

nicht kommentiert /etc/mysql/my.cnfund der IP-Adresse Ihres Computers zugewiesen und kein Loopback

Für MySQL Version 5.7 und höher

nicht kommentiert /etc/mysql/mysql.conf.d/mysqld.cnfund der IP-Adresse Ihres Computers zugewiesen und kein Loopback

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Oder fügen Sie eine hinzu, bind-address = 0.0.0.0wenn Sie die IP nicht angeben möchten

Stoppen Sie dann MySQL und starten Sie es mit dem neuen Eintrag my.cnf neu. Gehen Sie nach dem Ausführen zum Terminal und geben Sie den folgenden Befehl ein.

lsof -i -P | grep :3306

Das sollte ungefähr so ​​mit Ihrer tatsächlichen IP in den xxx zurückkommen

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Wenn die obige Anweisung korrekt zurückgegeben wird, können Sie Remotebenutzer akzeptieren. Damit ein Remote-Benutzer jedoch eine Verbindung mit den richtigen Berechtigungen herstellen kann, muss dieser Benutzer sowohl im localhost als auch in '%' wie in erstellt werden.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

dann,

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

und schlussendlich,

FLUSH PRIVILEGES; 
EXIT;

Wenn Sie nicht denselben Benutzer wie oben erstellt haben, erben Sie bei der lokalen Anmeldung möglicherweise die lokalen Basishost-Berechtigungen und haben Zugriffsprobleme. Wenn Sie den Zugriff von myuser einschränken möchten, müssen Sie die Syntax der GRANT-Anweisung HIER nachlesen. Wenn Sie dies alles durchstehen und immer noch Probleme haben, veröffentlichen Sie einige zusätzliche Fehlerausgaben und die entsprechenden Zeilen von my.cnf.

HINWEIS: Wenn lsof nicht zurückkehrt oder nicht gefunden wird, können Sie es HIER basierend auf Ihrer Linux-Distribution installieren . Sie brauchen kein lsof, um die Dinge zum Laufen zu bringen, aber es ist äußerst praktisch, wenn die Dinge nicht wie erwartet funktionieren.

Apesa
quelle
1
Vielen Dank, obwohl ich diese Schritte beim ersten Mal richtig ausgeführt habe, habe ich sie erneut ausgeführt, als Sie gepostet haben und wie ein Zauber gearbeitet haben!
Cristian Eduardo Lehuede Lyon
14
Für alle anderen, die damit zu kämpfen lsof -i -P | grep :3306haben, hat das nicht funktioniert, aber die Remoteverbindung funktioniert ohne diese Bestätigung immer noch einwandfrei. Ignorieren Sie, wenn Sie nicht die richtige Ausgabe sehen.
Mike S
@ Mike Slutsky Danke für den Hinweis, ich habe meine Antwort bearbeitet. Sie können lsof installieren, wenn es noch nicht installiert ist.
Apesa
2
FWIW ist auf vielen Systemen sudo lsof -i -Pviel nützlicher als lsof -i -P(vorausgesetzt, Sie sind als nicht privilegierter Benutzer angemeldet).
Dan Passaro
2
lsof -i -P | grep :3306gibt nichts zurück!
Grün
40

Fügen Sie ein paar Punkte zu Apesas ausgezeichnetem Beitrag hinzu:

1) Sie können den folgenden Befehl verwenden, um die IP-Adresse zu überprüfen, die der MySQL-Server abhört

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Erzwingt FLUSH PRIVILEGESdas Laden von Grant-Tabellen, wenn die Änderungen aus irgendeinem Grund nicht sofort wirksam werden

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

user == der Benutzer, mit dem Sie eine Verbindung zu mysql herstellen ex.root
passwd == das Kennwort, mit dem Sie eine Verbindung zu mysql herstellen

3) Wenn die Netfilter-Firewall sudo ufw enableauf dem MySQL-Server aktiviert ist ( ), gehen Sie wie folgt vor, um Port 3306 für den Remotezugriff zu öffnen:

sudo ufw allow 3306

Überprüfen Sie den Status mit

sudo ufw status

4) Sobald eine Remoteverbindung hergestellt ist, kann diese mithilfe von Befehlen auf dem Client- oder Servercomputer überprüft werden

netstat -an | grep 3306
netstat -an | grep -i established
Jonathan L.
quelle
3
Das hat meinen ganzen Tag gerettet! Danke für sudo ufw status!!
Riddhiman Adib
netstat -nlt | grep 3306kehrt leer zurück
João Pimentel Ferreira
@ João Pimentel Ferreira stellen Sie sicher, dass MySQL zuerst ausgeführt wird, verwenden Sie den Befehl "/etc/init.d/mysql Status", um zu überprüfen
Jonathan L
8

MySQL hört nur auf localhost. Wenn wir den Remotezugriff darauf aktivieren möchten, müssen wir einige Änderungen in der Datei my.cnf vornehmen:

sudo nano /etc/mysql/my.cnf

Wir müssen die Bindungsadresse auskommentieren und externe Sperrzeilen überspringen:

#bind-address = 127.0.0.1
# skip-external-locking

Nachdem wir diese Änderungen vorgenommen haben, müssen wir den MySQL-Dienst neu starten:

sudo service mysql restart
Vinh Lee
quelle
1
skip-external-locking
Stellen Sie
1
Ich habe das Überspringen der externen Sperre nicht auskommentiert und es funktioniert immer noch.
Marcia Ong
Ich musste es in /etc/mysql/mysql.conf.d
Bartando
meins ist dieser Ort:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester
1

Vergessen Sie beim Testen unter Windows nicht, Port 3306 zu öffnen.

Marw
quelle
Ah, Sie sind ein Genie. Dies ist SUPER wichtig, wenn Sie das Windows-Subsystem für Linux verwenden. Sie müssen Port 3306 für eingehenden Datenverkehr über die Windows-Firewall öffnen und keines der oben genannten Dinge, um zu überprüfen, ob MySQL funktioniert das Subsystem
Brian Leishman
1

Sie verwenden Ubuntu 12 (ziemlich alt)

Öffnen Sie zunächst die Datei /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf in Ubuntu 14.04 und früheren Versionen)

Suchen Sie unter [mysqld] die Zeile "bind-address = 127.0.0.1" und ändern Sie sie in "bind-address = 0.0.0.0" oder kommentieren Sie sie

Starten Sie dann den Ubuntu MysQL Server neu systemctl restart mysql.service

Jetzt ermöglicht Ubuntu Server den Remotezugriff auf den MySQL Server. Sie müssen jedoch MySQL-Benutzer so konfigurieren, dass der Zugriff von jedem Host aus möglich ist.

Der Benutzer muss über 'username'@'%'alle erforderlichen Zuschüsse verfügen

Führen Sie den Befehl netstat wie folgt aus, um sicherzustellen, dass der MySQL-Server alle Schnittstellen überwacht.

netstat -tulnp | grep mysql

Hoffe das funktioniert!

Gaurav Singh
quelle