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/):

  1. 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:

  1. 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:

  1. 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:

  1. 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ź

Zawartość pola nie będzie udostępniana publicznie.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Znaki końca linii i akapitu dodawane są automatycznie.
  • Dostępne jest formatowanie fragmentów kodu źródłowego używając tagów: <code>, <blockcode>, <bash>, <c>, <cpp>, <css>, <drupal5>, <drupal6>, <html>, <java>, <js>, <perl>, <php>, <python>, <ruby>, <sql>.

Więcej informacji na temat formatowania

  __  __   ___    ___  __   __  _  __
| \/ | | _ \ / __| \ \ / / | |/ /
| |\/| | | _/ | (_ | \ V / | ' <
|_| |_| |_| \___| \_/ |_|\_\
Proszę wpisać litery (tylko wielkie litery) z napisu w stylu ASCII.