Zdalny dostęp do bazy danych MySQL i nie tylko.
Serwer bazy danych MySQL jako domyślne ustawienia przyjmuje, że będzie pracował jedynie lokalnie - to znaczy że dostęp z zewnątrz będzie niedostępny. Założenie słuszne i większość firm hostingowych (w tym również panic.pl) nie zezwala na dostęp do bazy z zewnątrz. U siebie na darkgrave również nie udostępniałem bazy, jedynie do połączeń z localhosta. Chciałem napisać skrypt z bazą danych filmów, jednak uświadomiłem sobie że to strata czasu. Katalog chciałem zrobić w celu synchronizacji informacji pomiędzy domownikami. Kiedyś próbowałem używać do katalogowania filmów Griffith który (jak większość tego typu aplikacji) wspiera m.in. MySQL.
Postanowiłem zamiast pisać skrypt i zarządzać katalogiem przez stronę zainstalować na wszystkich komputerach klienckich Griffith i łączyć się z bazą danych na darkgrave. Jak to zwykle bywa zasięgnąłem języka w Googlach. Aby MySQL wpuszczał zdalne połączenia należy usunąć linię z pliku my.cfg (najczęściej w /etc/):
-
skip-networking
Oprócz tego należy nadać odpowiednie prawa dla użytkownika MySQL dokładnie chodzi o ustawienie wartości kolumny hostname. Z reguły wartość tego pola ustawia się na localhost – w końcu połączenia z innych komputerów są zabronione. Najprościej użyć znaku dowolnego hosta % i teoretycznie połączenie z zewnętrznego komputera powinno zakończyć się sukcesem.
Jak zwykle pojawia się jakieś ale, gdyby nie to ale nie powstałby ten wpis (na szczęście coś się dzieje i blog powoli się rozwija). Próbując połączyć się zdalnie z moją bazą danych otrzymywałem komunikat:
-
Lost connection to MySQL server at 'reading initial communication packet', system error: 0
Przeważnie w takich sytuacjach rozwiązania są banalnie proste (jak chociażby ostatni wpis traktujący o Sendmailu). Cała rzecz rozbija się o dostęp zewnętrznych hostów do usług na lokalnym komputerze. Do pliku /etc/hosts.allow należy dodać wpis zezwalający wybranym hostom na dostęp do serwera MySQL:
-
mysqld: zezwolony_adres kolejny_adres
Adresy kolejno wpisujemy po spacji. Jeżeli dostęp do serwera MySQL ma być dla wszystkich to do hosts.allow wpisujemy: mysqld: all
W moich założeniach dostęp do serwera mają mieć tylko i wyłącznie hosty lokalne dlatego mój wpis wygląda tak: mysqld: 192.168.
Dla innych usług również możemy ustawić dostęp z poszczególnych komputerów np. dla SSH:
-
sshd: 192.168. 91.203.134.74
Mam nadzieję że mała porada komuś się przyda, na pewno mi gdybym zapomniał w czym rzecz następnym razem.


Odpowiedzi
Dodaj nową odpowiedź