Jeśli próbujesz połączyć się z bazą MySQL z serwera zdalnego, ale pojawia się błąd jak poniżej, lub połączenie w ogóle nie działa ten artykuł jest dla ciebie.
(w tym przypadku serwer jest już zbindowany na zewnętrzne IP, ale nie ma właściwego użytkownika)
ERROR 1130 (HY000): Host ‘1.2.3.4’ is not allowed to connect to this MySQL server
lub (w przypadku tego błędu, serwer może też po prostu nie działać)
Error 2003 Can't connect to MySql server on '1.2.3.4' (10038).
0. Otwórz terminal VPS
Musimy połączyć się z SSH naszego serwera, możemy użyć do tego programu PuTTY lub jego następcy Bitvise.
1. Zmień konfiguracje MySQL
Kiedy już otworzyliśmy konsolę możemy zacząć działać. Najpierw zedytujemy plik my.cnf
odpowiadający za główna konfiguracje bazy danych. Możemy do tego użyć edytora nano
, jest on jednym z najłatwiejszych w obsłudze i w zupełności wystarczy do tego zadania. Dla bezpieczeństwa, jakby coś poszło nie tak najpierw robimy kopię pliku (komenda: cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
).
[Hint: akceptowalne lokalizacje my.cnf: mysqld --help -v | grep my.cnf
]
Wpisujemy:
nano /etc/mysql/my.cnf
Odnajdujemy takie dwie linijki, zmieniamy adres 127.0.0.1
na 0.0.0.0
i usuwamy znaki komentarza (#
):
#bind-address = 127.0.0.1
#skip-networking
Wynik to:
bind-address = 0.0.0.0
skip-networking
Notka:
Czasami widzimy tylko:
bind-address = 127.0.0.1
wtedy wystarczy po prostu zmienić adres.
Zapisujemy zmiany w pliku klikając kombinacje klawiszy CTRL + X
, a następnie Enter
.
Restartujemy MySQL:
service mysql restart
2.1. Dodawanie użytkownika ze zdalnym dostępem
Aby móc łączyć się z naszą bazą zdalnie musimy stworzyć nowego użytkownika i nadać mu odpowiednie uprawnienia. Możemy użyć do tego panelu phpmyadmin. Przechodzimy w nim do sekcji .
Wpisujemy:
- Jeśli chcemy zezwolić na połączenia z każdego IP:
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION
- Jeśli chcemy zezwolić na połączenia z jednego IP:
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION
Gdzie:
USERNAME
to login nowego użytkownikaPASSWORD
to hasło nowego użytkownika1.2.3.4
to adres IP z którego będzie można się łączyć
Możemy też wybrać konkretną bazę do której ma mieć dostęp użytkownik zamieniając:
ALL PRIVILEGES ON *.*
na
ALL PRIVILEGES ON BAZA.*
lub bazę i konkretną tabele:
ALL PRIVILEGES ON BAZA.TABELA
Na końcu wpisujemy jeszcze:
FLUSH PRIVILEGES
2.2. Odbieranie dostępu
W przypadku gdy będziesz chciał usunąć użytkownika wystarczy wpisać:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%'
lub gdy ustaliliśmy konkretne IP:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Zródlo: stackoverflow