MySQL/MariaDb – dostęp z zewnątrz

Serwer bazy danych MySQL/MariaDB domyślnie zezwala jedynie na połączenia z sieci lokalnej. Jeżeli chcesz udostępnić serwer dla wszystkich interfejsów, musisz dokonać kilku zmian w ustawieniach.

Plik konfiguracyjny

Wpierw musisz wprowadzić zmianę w pliku konfiguracyjnym.

Przejdź do jego lokalizacji.

cd /etc/mysql/mariadb.conf.d

Po czym otwórz go do edycji.

sudo nano 50-server.cnf

Wpierw upewnij się, że nie masz wpisanego poniższego ustawienia. Jeżeli masz, usuń je lub zakomentuj znakiem #. Starsze wersje MySQL miały dodany ten wpis domyślnie.

#skip-networking

Znajdź następnie wpis bind-address i podmień jego zawartość z tej wskazującej na sieć lokalną

bind-address = 127.0.0.0

na taką, która pozwala na połączenie z dowolnego urządzenia w sieci.

bind-address = 0.0.0.0

Niestety, nie ma możliwości dodania kilku adresów czy przedziału adresów. Aby to zrobić, należy odpowiednio skonfigurować firewall. Pamiętaj także, że na serwerze przechowującym istotne dane taka konfiguracja musi być koniecznie wdrożona! Z uwagi na prostotę tego tutorialu, nie będę jej w nim poruszać.

Uprawnienia

Serwer MySQL domyślnie powinien posiadać już taką konfigurację 0.0.0.0 (ale sprawdź dla pewności). Jeżeli problem występuje nadal, zapewne jest to wina uprawnień. W tym celu uruchom linię poleceń dla serwera, wpisując:

sudo mysql -u root -p

Po czym nadaj odpowiedniej bazie uprawnienia:

GRANT ALL PRIVILEGES ON *.* TO 'YOUR_MYSQL_USERNAME'@'192.168.1.%' IDENTIFIED BY 'YOUR_MYSQL_PASSWORD' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'YOUR_MYSQL_USERNAME'@'10.8.0.%' IDENTIFIED BY 'YOUR_MYSQL_PASSWORD' WITH GRANT OPTION;

Możesz sprawdzić dodane wpisy poleceniem:

SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';

Jeżeli się pomyliłeś – nic się nie stało. Możesz usunąć te uprawnienia analogicznym poleceniem.

Delete FROM mysql.user WHERE Host <> 'localhost';

Możesz teraz zapisać ustawienia i wyłączyć konsolę MySQL.

FLUSH PRIVILEGES;
exit

Pozostaje już tylko zrestartować serwis.

sudo service mysql restart
#lub
sudo service mariadb restart