Android

Jak zezwolić na zdalne połączenia z serwerem bazy danych mysql

Instalacja bazy danych MySQL + phpMyAdmin na serwerze VPS / Dedyk

Instalacja bazy danych MySQL + phpMyAdmin na serwerze VPS / Dedyk

Spisu treści:

Anonim

Domyślnie serwer MySQL nasłuchuje połączeń tylko z hosta lokalnego, co oznacza, że ​​dostęp do niego mogą uzyskać tylko aplikacje działające na tym samym hoście.

Jednak w niektórych sytuacjach konieczne jest uzyskanie dostępu do serwera MySQL ze zdalnej lokalizacji. Na przykład, gdy chcesz połączyć się ze zdalnym serwerem MySQL z systemu lokalnego lub podczas korzystania z wdrożenia na wielu serwerach, na którym aplikacja działa na innym komputerze niż serwer bazy danych. Jedną z opcji byłoby uzyskanie dostępu do serwera MySQL przez tunel SSH, a drugą jest skonfigurowanie serwera MySQL do akceptowania połączeń zdalnych.

W tym przewodniku przeprowadzimy kroki niezbędne do umożliwienia zdalnego połączenia z serwerem MySQL. Te same instrukcje dotyczą MariaDB.

Konfigurowanie serwera MySQL

Pierwszym krokiem jest ustawienie serwera MySQL na nasłuchiwanie na określonym adresie IP lub na wszystkich adresach IP na komputerze.

Jeśli serwer MySQL i klienci mogą komunikować się ze sobą przez sieć prywatną, najlepszą opcją jest ustawienie serwera MySQL tak, aby nasłuchiwał tylko na prywatnym IP. W przeciwnym razie, jeśli chcesz połączyć się z serwerem za pośrednictwem sieci publicznej, ustaw serwer MySQL, aby nasłuchiwał na wszystkich adresach IP na komputerze.

Aby to zrobić, musisz edytować plik konfiguracyjny MySQL i dodać lub zmienić wartość opcji bind-address . Możesz ustawić pojedynczy adres IP i zakresy adresów IP. Jeśli adres to 0.0.0.0 , serwer MySQL akceptuje połączenia na wszystkich interfejsach hosta IPv4. Jeśli masz skonfigurowany IPv6 w swoim systemie, zamiast 0.0.0.0 użyj :: .

Lokalizacja pliku konfiguracyjnego MySQL różni się w zależności od dystrybucji. W Ubuntu i Debianie plik znajduje się w /etc/mysql/mysql.conf.d/mysqld.cnf , natomiast w dystrybucjach opartych na Red /etc/mysql/mysql.conf.d/mysqld.cnf , takich jak CentOS, plik znajduje się w /etc/my.cnf .

Otwórz plik za pomocą edytora tekstu:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Wyszukaj wiersz rozpoczynający bind-address i ustaw jego wartość na adres IP, na którym serwer MySQL powinien nasłuchiwać.

Domyślnie wartość jest ustawiona na 127.0.0.1 (nasłuchuje tylko w localhost).

W tym przykładzie ustawimy serwer MySQL na nasłuchiwanie na wszystkich interfejsach IPv4, zmieniając wartość na 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

Jeśli istnieje wiersz zawierający skip-networking , usuń go lub skomentuj, dodając # na początku wiersza.

W MySQL 8.0 i nowszych dyrektywa bind-address może nie być obecna. W takim przypadku dodaj go pod Sekcja.

Po zakończeniu zrestartuj usługę MySQL, aby zmiany odniosły skutek. Tylko root lub użytkownicy z uprawnieniami sudo mogą restartować usługi.

Aby zrestartować usługę MySQL na Debianie lub Ubuntu, wpisz:

sudo systemctl restart mysql

W przypadku dystrybucji opartych na RedHat, takich jak CentOS, w celu ponownego uruchomienia usługi:

sudo systemctl restart mysqld

Udzielanie dostępu użytkownikowi z komputera zdalnego

Następnym krokiem jest umożliwienie dostępu do bazy danych zdalnemu użytkownikowi.

Zaloguj się do serwera MySQL jako użytkownik root, wpisując:

sudo mysql

mysql -uroot -p

Z poziomu powłoki MySQL użyj instrukcji GRANT , aby przyznać dostęp zdalnemu użytkownikowi.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

Gdzie:

  • database_name to nazwa bazy danych, z którą użytkownik się połączy. user_name to nazwa użytkownika MySQL. ip_address to adres IP, z którego użytkownik się połączy. Użyj % aby zezwolić użytkownikowi na połączenie z dowolnego adresu IP. user_password to hasło użytkownika.

Na przykład, aby przyznać dostęp do bazy danych dbname użytkownikowi o nazwie foo z hasłem my_passwd z komputera klienckiego o 10.8.0.5 IP 10.8.0.5 , należy uruchomić:

GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Konfigurowanie zapory ogniowej

Ostatnim krokiem jest skonfigurowanie zapory sieciowej, aby zezwalała na ruch na porcie 3306 (domyślny port MySQL) ze zdalnych komputerów.

Iptables

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Zezwól na dostęp z określonego adresu IP:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW

UFW jest domyślnym narzędziem zapory sieciowej w Ubuntu. Aby zezwolić na dostęp z dowolnego adresu IP w Internecie (bardzo niepewny), uruchom:

sudo ufw allow 3306/tcp

Zezwól na dostęp z określonego adresu IP:

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallD to domyślne narzędzie do zarządzania zaporą w CentOS. Aby zezwolić na dostęp z dowolnego adresu IP w Internecie (bardzo niepewny):

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload

Aby zezwolić na dostęp z określonego adresu IP na określonym porcie, możesz utworzyć nową strefę FirewallD lub użyć rozszerzonej reguły. mysqlzone nową strefę o nazwie mysqlzone :

sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

Weryfikacja zmian

Aby sprawdzić, czy użytkownik zdalny może połączyć się z serwerem MySQL, uruchom następujące polecenie:

mysql -u user_name -h mysql_server_ip -p

Gdzie user_name to nazwa użytkownika, któremu udzielono dostępu, a mysql_server_ip to adres IP hosta, na którym działa serwer MySQL.

Jeśli wszystko jest poprawnie skonfigurowane, będziesz mógł zalogować się do zdalnego serwera MySQL.

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

Poniższy błąd wskazuje, że użytkownik, którego próbujesz się zalogować, nie ma uprawnień dostępu do zdalnego serwera MySQL.

"ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"

Wniosek

MySQL, domyślnie najpopularniejszy serwer bazy danych typu open source, nasłuchuje połączeń przychodzących tylko na hoście lokalnym.

Aby umożliwić zdalne połączenia z serwerem MySQL, musisz wykonać następujące kroki:

  1. Skonfiguruj serwer MySQL do nasłuchiwania na wszystkich lub na określonym interfejsie. Udziel dostępu zdalnemu użytkownikowi. Otwórz port MySQL w zaporze.
mysql mariadb