2013-03-27 71 views
76

Z jakiegoś powodu nie udało mi się połączyć zdalnie z moim serwerem MySQL. Próbowałem wszystkiego i wciąż dostaję błędy.Zdalne połączenia 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) 

Teraz Próbowałem uruchomiony

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

i nadal nic! Co robię źle?

EDYCJA: my.cnf skomentował bind IP.

+0

jakiej wersji MySQL używasz? – Steve

+0

Wersja serwera: 5.5.29-0ubuntu0.12.10.1 (Ubuntu) –

+0

co to polecenie zwraca? ubuntu ~ $ sudo lsof -i -P | grep: 3306 – apesa

Odpowiedz

266

Aby wystawiać MySQL do niczego innego niż localhost będzie mieć następującą linię

dla MySQL w wersji 5.6 i poniżej

odkomentowane w /etc/mysql/my.cnf i przypisany do adresu komputery IP i nie LOOPBACK

mysql wersja 5.7, powyżej

komentarzem na /etc/mysql/mysql.conf.d/mysqld.cnf i przypisany do adresu IP i komputery nie LOOPBACK

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

Lub dodaj bind-address = 0.0.0.0 jeśli nie chcesz, aby określić OD

Następnie zatrzymaj i uruchom ponownie MySQL z nowego wpisu my.cnf. Po uruchomieniu przejdź do terminala i wprowadź następujące polecenie.

lsof -i -P | grep :3306 

To powinno wrócić coś podobnego z aktualnej IP w XXX

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

Jeśli powyższe wyrażenie zwraca poprawnie będzie wtedy w stanie przyjąć zdalnych użytkowników. Jednak dla użytkownika zdalnego łączenia z odpowiednimi specjalnie uprawnionych trzeba mieć, że użytkownik tworzone zarówno w localhost i „%”, jak w.

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

Następnie

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

i wreszcie

FLUSH PRIVILEGES; 
EXIT; 

Jeśli nie masz tego samego użytkownika utworzonego jak powyżej, po zalogowaniu się lokalnie możesz dziedziczyć podstawowe uprawnienia localhost i problemy z dostępem. Jeśli chcesz ograniczyć dostęp do myuser, musisz przeczytać na składni instrukcji GRANT HERE Jeśli przejdziesz przez to wszystko i nadal będziesz mieć problemy, wyślij dodatkowe dane o błędach i odpowiednie linie my.cnf.

UWAGA: Jeśli lsof nie zwróci lub nie zostanie znaleziony, możesz zainstalować go pod numerem HERE na podstawie swojej dystrybucji Linuksa. Nie potrzebujesz lsof, aby wszystko działało, ale jest bardzo przydatne, gdy rzeczy nie działają zgodnie z oczekiwaniami.

+1

Dzięki, mimo że postępowałem zgodnie z tymi instrukcjami poprawnie za pierwszym razem, zrobiłem je ponownie, gdy pisałeś i pracowałeś jak czar! –

+10

Dla każdego, kto zmaga się z 'lsof -i -P | grep: 3306', które nie działało, ale zdalne połączenie nadal działa dobrze bez tego potwierdzenia, zignorowanie, jeśli nie widzisz odpowiedniego wyjścia. –

+0

@Mike Slutsky Dzięki za notatkę, zredagowałem moją odpowiedź. Możesz zainstalować plik lsof, jeśli nie jest jeszcze zainstalowany. – apesa

24

Dodaj kilka punktów na szczycie apesa wspaniałe postu:

1), można użyć polecenia poniżej, aby sprawdzić adres IP, adres mysql słucha

netstat -nlt | grep 3306 

sample result: 

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

2) Użyj FLUSH PRIVILEGES zmusić tabele dotacje do być ładowane, jeśli z jakiegoś powodu nie zmienia się skuteczna natychmiast

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) Jeśli firewall netfilter jest włączona (sudo ufw enable) na mysql Maszyna serwera, wykonaj następujące czynności, aby otworzyć port 3306 dla zdalnego dostępu:

sudo ufw allow 3306 

Status Check użyciu

sudo ufw status 

4) Po zdalne połączenie zostanie nawiązane, może zostać zweryfikowana w każdym kliencie lub serwerze Używanie poleceń

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

To uratowało mój cały dzień! Dzięki za 'sudo ufw status' !! –

+0

'netstat -nlt | grep 3306' zwraca pusty –

2

MySQL nasłuchuje tylko na localhost, jeśli chcemy, aby umożliwić zdalny dostęp do niego, to musimy się pewne zmiany w pliku my.cnf:

sudo nano /etc/mysql/my.cnf 

Musimy zakomentuj bind-adres i pominąć-external-blokujące linie:

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

Po wprowadzeniu tych zmian, musimy ponownie uruchomić usługę MySQL:

sudo service mysql restart 
0

Jeśli testujesz w systemie Windows, nie zapomnij otworzyć portu 3306.