2013-03-27 10 views
76

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

[email protected]:/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

`GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'XXXXX'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'XXXXXX';` 
läuft versucht

und immer noch nichts! Was mache ich falsch?

EDIT: my.cnf hat die Bindung IP auskommentiert.

+0

Welche Version von MySQL verwenden Sie? – Steve

+0

Serverversion: 5.5.29-0ubuntu0.12.10.1 (Ubuntu) –

+0

Was gibt dieser Befehl zurück? ubuntu ~ $ sudo lsof -i -P | grep: 3306 – apesa

Antwort

266

aussetzen MySQL auf etwas anderes als localhost Sie die folgende Zeile

für MySQL Version 5.6 und unter

uncommented in /etc/mysql/my.cnf und Ihre Adresse Computer IP zugewiesen haben müssen und nicht die Loopback

für mySQL Version 5.7 und höher

unkommentiert in /etc/mysql/mysql.conf.d/mysqld.cnf und auf Ihre Computer IP-Adresse zugewiesen und Loopback nicht

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

Oder ein bind-address = 0.0.0.0 hinzufügen, wenn Sie die IP-

Dann beenden und neu starten MySQL mit dem neuen my.cnf Eintrag angeben, nicht wollen. Sobald Sie fertig sind, gehen Sie zum Terminal und geben Sie den folgenden Befehl ein.

lsof -i -P | grep :3306 

dass so etwas wie dies wieder mit Ihrem tatsächlichen IP in dem xxx

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

kommen sollte Wenn die obige Anweisung gibt korrekt werden Sie dann in der Lage sein, Remote-Benutzer zu akzeptieren. Doch für einen Remote-Benutzer mit den richtigen Privilegien verbinden Sie müssen die Benutzer in geschaffen haben, sowohl den lokalen Host und ‚%‘, wie in.

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 schließlich

FLUSH PRIVILEGES; 
EXIT; 

Wenn Sie nicht den gleichen Benutzer wie oben erstellt haben, können Sie beim lokalen Anmelden die Berechtigungen des Basis-localhost erben und Zugriffsprobleme haben. Wenn Sie den Zugriff einschränken möchten, den myuser hat, müssen Sie die GRANT-Statussyntax lesen. HERE Wenn Sie das alles durchstehen und noch Probleme haben, schreiben Sie eine zusätzliche Fehlerausgabe und die entsprechenden Zeilen von my.cnf.

HINWEIS: Wenn lsof nicht zurückkehrt oder nicht gefunden wird, können Sie es auf Basis Ihrer Linux-Distribution HERE installieren. Sie brauchen nicht lsof, um Dinge zu arbeiten, aber es ist sehr praktisch, wenn Dinge nicht wie erwartet funktionieren.

+1

Danke, obwohl ich diese Schritte beim ersten Mal richtig befolgt habe, habe ich sie wieder gemacht, als du gepostet und gearbeitet hast wie ein Zauber! –

+10

Für jeden, der mit 'lsof -i-P | grep: 3306', das hat nicht funktioniert, aber Remote-Verbindung funktioniert immer noch ohne diese Bestätigung, ignorieren Sie, wenn Sie nicht die richtige Ausgabe sehen. –

+0

@Mike Slutsky Danke für die Notiz, ich habe meine Antwort bearbeitet. Sie können lsof installieren, wenn es nicht bereits installiert ist. – apesa

24

hinzufügen wenige Punkte auf der APESA ausgezeichneten Beitrag:

1) Sie folgenden Befehl verwenden, um die IP-Adresse MySQL-Server zu überprüfen, hört

netstat -nlt | grep 3306 

sample result: 

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

2) Verwenden Sie FLUSH PRIVILEGES Zuschuss zu zwingen Tabellen wenn aus irgendeinem Grund geladen werden nicht die Änderungen wirksam werden sofort

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; 

3) wenn netfilter-Firewall aktiviert ist (sudo ufw enable) auf mysql Server-Maschine, gehen Sie wie folgt den Port 3306 für den Fernzugriff zu öffnen:

sudo ufw allow 3306 

Prüfstatus mit

sudo ufw status 

4) Sobald eine Remote-Verbindung hergestellt ist, kann es entweder Client- oder Server-Maschine überprüft werden mit Befehlen

netstat -an | grep 3306 
netstat -an | grep -i established 
+2

Das hat meinen ganzen Tag gerettet! Danke für 'sudo ufw status' !! –

+0

'netstat -nlt | Grep 3306' kehrt leer zurück –

2

MySQL nur auf localhost zuhört, wenn wir den Remote-Zugriff darauf ermöglichen wollen, dann müssen wir einige Änderungen in my.cnf gemacht:

sudo nano /etc/mysql/my.cnf 

Wir brauchen die bind-Adresse kommentieren und skip-external-locking Linien:

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

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

sudo service mysql restart 
0

Wenn Sie unter Windows testen, vergessen Sie nicht, den Port 3306 zu öffnen.