Android

Jak povolit vzdálené připojení k databázovému serveru mysql

Azure Friday | Azure App Service with Hybrid Connections to On-premises Resources

Azure Friday | Azure App Service with Hybrid Connections to On-premises Resources

Obsah:

Anonim

Ve výchozím nastavení server MySQL poslouchá připojení pouze z localhost, což znamená, že k němu mohou přistupovat pouze aplikace spuštěné na stejném hostiteli.

V některých situacích je však nutné přistupovat k serveru MySQL ze vzdáleného umístění. Například, pokud se chcete připojit ke vzdálenému serveru MySQL z místního systému nebo pokud používáte nasazení na více serverech, kde je aplikace spuštěna na jiném počítači než databázový server. Jednou z možností by byl přístup k serveru MySQL prostřednictvím tunelu SSH a další je konfigurace serveru MySQL tak, aby akceptoval vzdálená připojení.

V této příručce projdeme kroky nezbytné k umožnění vzdáleného připojení k serveru MySQL. Stejné pokyny platí pro MariaDB.

Konfigurace serveru MySQL

Prvním krokem je nastavení serveru MySQL tak, aby poslouchal konkrétní IP adresu nebo všechny IP adresy v počítači.

Pokud server MySQL a klienti mohou spolu komunikovat prostřednictvím soukromé sítě, pak nejlepší možností je nastavit server MySQL tak, aby poslouchal pouze na soukromé IP. V opačném případě, pokud se chcete připojit k serveru přes veřejnou síť, nastavte server MySQL tak, aby poslouchal na všech adresách IP v počítači.

Chcete-li to provést, musíte upravit konfigurační soubor MySQL a přidat nebo změnit hodnotu volby bind-address . Můžete nastavit jednu IP adresu a rozsahy IP. Pokud je adresa 0.0.0.0 , server MySQL přijímá připojení na všech hostitelských rozhraních IPv4. Pokud máte v systému nakonfigurován protokol IPv6, použijte namísto 0.0.0.0 použití :: .

Umístění konfiguračního souboru MySQL se liší v závislosti na distribuci. V Ubuntu a Debianu je soubor umístěn na /etc/mysql/mysql.conf.d/mysqld.cnf , zatímco v distribucích založených na Red Hat, jako je CentOS, je soubor umístěn na /etc/my.cnf .

Otevřete soubor pomocí textového editoru:

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

Vyhledejte řádek začínající bind-address a nastavte jeho hodnotu na IP adresu, na které by měl server MySQL poslouchat.

Ve výchozím nastavení je tato hodnota nastavena na 127.0.0.1 (poslouchá pouze v localhost).

V tomto příkladu nastavíme server MySQL tak, aby poslouchal všechna rozhraní IPv4 změnou hodnoty na 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

Pokud existuje řádek obsahující skip-networking , odstraňte jej nebo přidejte komentář na začátek řádku.

V MySQL 8.0 a vyšší nemusí být direktiva bind-address k dispozici. V takovém případě ji přidejte pod sekce.

Po dokončení restartujte službu MySQL, aby se změny projevily. Restart služeb mohou provádět pouze root nebo uživatelé s právy sudo.

Chcete-li restartovat službu MySQL na Debianu nebo Ubuntu, zadejte:

sudo systemctl restart mysql

V distribucích založených na RedHat, jako je CentOS, restartujte provoz služby:

sudo systemctl restart mysqld

Udělení přístupu uživateli ze vzdáleného počítače

Dalším krokem je povolení přístupu k databázi vzdálenému uživateli.

Přihlaste se k MySQL serveru jako uživatel root zadáním:

sudo mysql

mysql -uroot -p

Z vnitřku prostředí MySQL použijte příkaz GRANT k udělení přístupu vzdálenému uživateli.

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

Kde:

  • database_name je název databáze, ke které se uživatel připojí. user_name je jméno uživatele MySQL. ip_address je IP adresa, ze které se uživatel připojí. Pomocí % povolte uživateli připojení z libovolné adresy IP. user_password je uživatelské heslo.

Chcete-li například udělit přístup k databázi dbname uživateli s názvem foo s heslem my_passwd z klientského počítače s IP 10.8.0.5 , měli byste spustit:

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

Konfigurace Firewallu

Posledním krokem je konfigurace brány firewall tak, aby umožňovala provoz na portu 3306 (výchozí port MySQL) ze vzdálených počítačů.

Iptables

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

Povolit přístup z konkrétní adresy IP:

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

UFW

UFW je výchozí nástroj brány firewall v Ubuntu. Chcete-li povolit přístup z libovolné adresy IP na Internetu (velmi nejistá), postupujte takto:

sudo ufw allow 3306/tcp

Povolit přístup z konkrétní adresy IP:

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallD je výchozí nástroj pro správu brány firewall v CentOS. Chcete-li povolit přístup z libovolné adresy IP na Internetu (velmi nejistá), postupujte takto:

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

Chcete-li povolit přístup z konkrétní adresy IP na konkrétním portu, můžete buď vytvořit novou zónu FirewallD, nebo použít bohaté pravidlo. Vytvořte novou zónu s názvem 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

Ověření změn

Chcete-li ověřit, zda se vzdálený uživatel může připojit k serveru MySQL, spusťte následující příkaz:

mysql -u user_name -h mysql_server_ip -p

Kde user_name je jméno uživatele, kterému jste udělili přístup, a mysql_server_ip je IP adresa hostitele, na kterém běží MySQL server.

Pokud je vše správně nastaveno, budete se moci přihlásit ke vzdálenému serveru MySQL.

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

Níže uvedená chyba znamená, že uživatel, který se pokoušíte přihlásit, nemá oprávnění pro přístup ke vzdálenému serveru MySQL.

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

Závěr

MySQL, nejpopulárnější open-source databázový server ve výchozím nastavení, poslouchá příchozí připojení pouze na localhost.

Chcete-li povolit vzdálené připojení k serveru MySQL, musíte provést následující kroky:

  1. Nakonfigurujte server MySQL tak, aby poslouchal na všech nebo na konkrétním rozhraní. Poskytněte přístup vzdálenému uživateli. Otevřete port MySQL ve vaší bráně firewall.
mysql mariadb