Wstecz Wstecz

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

  1. Połącz się z serwerem przez SSH

    Połącz się ze swoim serwerem VPS przez SSH. Więcej: Jak korzystać z PuTTY.

  2. 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.cnf

    Naciśnij Ctrl + W i wyszukaj bind-address. Domyślnie pozwala ono tylko na połączenia lokalne:

    bind-address = 127.0.0.1

    Zmień wartość, aby serwer przyjmował połączenia z zewnątrz:

    bind-address = 0.0.0.0

    Jeś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.

  3. Zrestartuj usługę bazy danych

    Aby zmiany zaczęły działać, zrestartuj usługę:

    sudo systemctl restart mysql
  4. Przygotuj użytkownika do zdalnego dostępu

    Otwórz konsolę MySQL:

    sudo mysql

    Jeś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 -p

    Zamiast 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';
    Nie używaj %, jeśli nie musisz

    Wpisują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.

  5. 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
  6. 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 3306
    Nie otwieraj portu dla wszystkich

    Komenda 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 -p

Jeś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.

Podobne poradniki

VPS Poradniki