Z jakiegoś powodu nie mogłem połączyć się zdalnie z moim serwerem MySQL. Próbowałem wszystkiego i nadal otrzymuję błędy.
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)
Teraz próbowałem biegać
GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX';
GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';`
i nadal nic! Co robię źle?
EDIT : my.cnf
skomentował bind ip.
Odpowiedzi:
Aby wystawić MySQL na cokolwiek innego niż localhost, będziesz musiał mieć następujący wiersz
Dla mysql w wersji 5.6 i starszych
odkomentowane
/etc/mysql/my.cnf
i przypisane do adresu IP twojego komputera, a nie sprzężenie zwrotneDla mysql w wersji 5.7 i nowszych
odkomentowane
/etc/mysql/mysql.conf.d/mysqld.cnf
i przypisane do adresu IP twojego komputera, a nie sprzężenie zwrotneLub dodaj,
bind-address = 0.0.0.0
jeśli nie chcesz określać adresu IPNastępnie zatrzymaj i uruchom ponownie MySQL z nowym wpisem my.cnf. Po uruchomieniu przejdź do terminala i wprowadź następujące polecenie.
To powinno wyglądać mniej więcej tak z Twoim rzeczywistym adresem IP w xxx
Jeśli powyższe oświadczenie zwróci się poprawnie, będziesz mógł akceptować użytkowników zdalnych. Jednak aby zdalny użytkownik mógł łączyć się z odpowiednimi uprawnieniami, musisz mieć tego użytkownika utworzonego zarówno w localhost, jak i '%', jak w.
następnie,
i w końcu,
Jeśli nie masz utworzonego tego samego użytkownika, co powyżej, logując się lokalnie możesz odziedziczyć podstawowe uprawnienia lokalnego hosta i mieć problemy z dostępem. Jeśli chcesz ograniczyć dostęp, jaki ma myuser, musisz przeczytać składnię instrukcji GRANT TUTAJ. Jeśli przejdziesz przez to wszystko i nadal masz problemy, napisz dodatkowe informacje o błędach i odpowiednie wiersze my.cnf.
UWAGA: Jeśli lsof nie zwróci lub nie zostanie znaleziony, możesz zainstalować go TUTAJ na podstawie swojej dystrybucji Linuksa. Nie potrzebujesz lsof, aby wszystko działało, ale jest niezwykle przydatne, gdy rzeczy nie działają zgodnie z oczekiwaniami.
źródło
lsof -i -P | grep :3306
, to nie zadziałało, ale połączenie zdalne nadal działa dobrze bez tego potwierdzenia, zignoruj, jeśli nie widzisz odpowiedniego wyjścia.sudo lsof -i -P
będzie znacznie bardziej użyteczne niżlsof -i -P
(zakładając, że jesteś zalogowany jako użytkownik nieuprzywilejowany).lsof -i -P | grep :3306
nic nie zwraca!Dodaj kilka punktów do doskonałego postu apesa:
1) Możesz użyć poniższego polecenia, aby sprawdzić adres IP, którego nasłuchuje serwer mysql
2) Użyj,
FLUSH PRIVILEGES
aby wymusić załadowanie tabel grantów, jeśli z jakiegoś powodu zmiany nie zaczną obowiązywać natychmiast3) Jeśli zapora sieciowa netfilter jest włączona (
sudo ufw enable
) na serwerze mysql, wykonaj następujące czynności, aby otworzyć port 3306 do zdalnego dostępu:sprawdź status za pomocą
4) Po ustanowieniu zdalnego połączenia można je zweryfikować na komputerze klienckim lub serwerze za pomocą poleceń
źródło
sudo ufw status
!!netstat -nlt | grep 3306
zwraca pusteMySQL nasłuchuje tylko hosta lokalnego, jeśli chcemy włączyć do niego zdalny dostęp to musimy dokonać pewnych zmian w pliku my.cnf:
Musimy skomentować bind-address i skip-external-locking lines:
Po wprowadzeniu tych zmian musimy zrestartować usługę mysql:
źródło
skip-external-locking
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Jeśli testujesz w systemie Windows, nie zapomnij otworzyć portu 3306.
źródło
Używasz Ubuntu 12 (dość starego)
Najpierw otwórz plik /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf w Ubuntu 14.04 i wcześniejszych wersjach
W [mysqld] Locate the Line, bind-address = 127.0.0.1 I zmień to na bind-address = 0.0.0.0 lub skomentuj
Następnie uruchom ponownie serwer Ubuntu MysQL
systemctl restart mysql.service
Teraz Ubuntu Server umożliwi zdalny dostęp do serwera MySQL, ale nadal musisz skonfigurować użytkowników MySQL, aby umożliwić dostęp z dowolnego hosta.
Użytkownik musi mieć
'username'@'%'
wszystkie wymagane uprawnieniaAby upewnić się, że serwer MySQL nasłuchuje na wszystkich interfejsach, uruchom polecenie netstat w następujący sposób.
netstat -tulnp | grep mysql
Mam nadzieję, że to zadziała!
źródło