Jak włączyć zdalny dostęp do MySQL
Domyślnie MySQL przyjmuje tylko lokalne połączenia z samego serwera. W tym poradniku pozwolisz łączyć się z bazą danych z innego komputera lub aplikacji, np. strony internetowej albo serwera gier.
Czego potrzebujesz przed rozpoczęciem
- Serwera VPS z Linuxem i zainstalowanym MySQL lub MariaDB.
- Użytkownika z uprawnieniami sudo.
- Publicznego adresu IP komputera lub serwera, z którego będziesz się łączyć.
Włączanie zdalnego dostępu
-
Połącz się z serwerem przez SSH
Połącz się ze swoim serwerem VPS przez SSH. Więcej: Jak korzystać z PuTTY.
-
Zmień ustawienie bind-address
Otwórz plik konfiguracyjny bazy danych. Ścieżka zależy od tego, czego używasz:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfsudo nano /etc/mysql/mariadb.conf.d/50-server.cnfNaciśnij Ctrl + W i wyszukaj bind-address. Domyślnie pozwala ono tylko na połączenia lokalne:
bind-address = 127.0.0.1Zmień wartość, aby serwer przyjmował połączenia z zewnątrz:
bind-address = 0.0.0.0Jeśli w pliku nie ma linii bind-address, dodaj ją pod linią [mysqld].
Jak zapisaćCtrl + O i Enter zapisuje plik, Ctrl + X zamyka edytor.
-
Zrestartuj usługę bazy danych
Aby zmiany zaczęły działać, zrestartuj usługę:
sudo systemctl restart mysqlsudo systemctl restart mariadb -
Przygotuj użytkownika do zdalnego dostępu
Otwórz konsolę MySQL:
sudo mysqlJeśli widzisz błąd ERROR 1698 (28000): Access denied, dla użytkownika root włączone jest uwierzytelnianie hasłem. W takim przypadku użyj:
mysql -u root -pZamiast 1.2.3.4 wpisz adres IP komputera lub serwera, z którego będziesz się łączyć. Następnie wybierz:
Utwórz użytkownika, który będzie mógł łączyć się tylko z podanego IP:
CREATE USER 'uzytkownik'@'1.2.3.4' IDENTIFIED BY 'haslo';Pozwól istniejącemu użytkownikowi łączyć się z podanego IP zamiast z localhost:
RENAME USER 'uzytkownik'@'localhost' TO 'uzytkownik'@'1.2.3.4';Nie używaj %, jeśli nie musiszWpisując '%' zamiast adresu IP, pozwolisz użytkownikowi łączyć się z dowolnego miejsca. To wygodne, ale automatyczne boty będą ciągle próbowały odgadnąć hasło.
-
Nadaj uprawnienia
Nadaj użytkownikowi uprawnienia tylko do bazy danych, której potrzebuje:
GRANT ALL PRIVILEGES ON baza_danych.* TO 'uzytkownik'@'1.2.3.4';Wyjdź z konsoli MySQL. Po komendzie GRANT nie trzeba wykonywać FLUSH PRIVILEGES.
exit -
Otwórz port 3306 w firewallu
Jeśli na serwerze działa firewall UFW, otwórz port MySQL tylko dla swojego adresu IP:
sudo ufw allow from 1.2.3.4 to any port 3306Nie otwieraj portu dla wszystkichKomenda sudo ufw allow 3306 udostępnia bazę danych całemu internetowi. Zawsze podawaj konkretny IP.
Czy się udało?
Na komputerze, z którego będziesz się łączyć, wpisz komendę, zastępując ip_serwera adresem IP swojego VPS:
mysql -u uzytkownik -h ip_serwera -pJeśli po wpisaniu hasła otworzy się konsola MySQL, zdalny dostęp działa. Na tym komputerze musi być zainstalowany klient MySQL.
Częste pytania
Błąd „ERROR 2003: Can’t connect to MySQL server”
Serwer nie przyjmuje połączenia. Sprawdź, czy zmieniłeś bind-address, zrestartowałeś usługę i otworzyłeś port 3306 dla swojego IP.
Błąd „Host ... is not allowed to connect”
Użytkownik został utworzony dla innego IP. Sprawdź komendą SELECT user, host FROM mysql.user; i upewnij się, że w kolumnie host jest twój IP.
Połączenie nie działa z PHP lub phpMyAdmin
Bardzo stare wersje PHP nie obsługują domyślnej metody caching_sha2_password. Najlepiej zaktualizować PHP. mysql_native_password jest wyłączony w MySQL 8.4 i usunięty w 9.0.
Czy jest bezpieczniejszy sposób?
Tak, tunel SSH. Wtedy nie trzeba zmieniać bind-address ani otwierać portu: ssh -L 3306:127.0.0.1:3306 [email protected]. Następnie łączysz się z 127.0.0.1 na swoim komputerze.
Co dalej
Jeśli masz problemy, napisz do nas na czacie na żywo lub e-mailem.