アンドロイド

mysqlデータベースサーバーへのリモート接続を許可する方法

目次:

Anonim

デフォルトでは、MySQLサーバーはlocalhostからの接続のみをリッスンします。つまり、同じホストで実行されているアプリケーションからのみアクセスできます。

ただし、状況によっては、リモートロケーションからMySQLサーバーにアクセスする必要があります。 たとえば、ローカルシステムからリモートMySQLサーバーに接続する場合、またはデータベースサーバーとは異なるマシンでアプリケーションが実行されているマルチサーバー展開を使用する場合。 1つのオプションは、SSHトンネルを介してMySQLサーバーにアクセスすることであり、別のオプションは、リモート接続を受け入れるようにMySQLサーバーを構成することです。

このガイドでは、MySQLサーバーへのリモート接続を許可するために必要な手順を説明します。 MariaDBにも同じ手順が適用されます。

MySQLサーバーの構成

最初のステップは、マシン上の特定のIPアドレスまたはすべてのIPアドレスでリッスンするようにMySQLサーバーを設定することです。

MySQLサーバーとクライアントがプライベートネットワークを介して相互に通信できる場合、最良のオプションは、プライベートIPでのみリッスンするようにMySQLサーバーを設定することです。 それ以外の場合、パブリックネットワーク経由でサーバーに接続する場合は、マシン上のすべてのIPアドレスでリッスンするようにMySQLサーバーを設定します。

そのためには、MySQL構成ファイルを編集し、 bind-address オプションの値を追加または変更する必要があります。 単一のIPアドレスとIP範囲を設定できます。 アドレスが 0.0.0.0 場合、MySQLサーバーはすべてのホストIPv4インターフェースで接続を受け入れます。 システムでIPv6が構成されている場合、 0.0.0.0 代わりに :: 使用します。

MySQL構成ファイルの場所は、ディストリビューションによって異なります。 UbuntuおよびDebianでは、ファイルは /etc/mysql/mysql.conf.d/mysqld.cnf にありますが、CentOSなどのRed Hatベースのディストリビューションでは、ファイルは /etc/my.cnf ます。

テキストエディターでファイルを開きます。

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

bind-address で始まる行を検索し、その値をMySQLサーバーがリッスンするIPアドレスに設定します。

デフォルトでは、値は 127.0.0.1 設定されます(localhostでのみリッスンします)。

この例では、値を 0.0.0.0 変更して、すべてのIPv4インターフェースでリッスンするようにMySQLサーバーを設定します

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

skip-networking を含む行がある場合は、行の先頭に # を追加して削除するかコメントアウトします。

MySQL 8.0以降では、 bind-address ディレクティブが存在しない場合があります。 この場合、以下に追加します セクション。

完了したら、MySQLサービスを再起動して、変更を有効にします。 rootまたはsudo特権を持つユーザーのみがサービスを再起動できます。

DebianまたはUbuntuでMySQLサービスを再起動するには、次を入力します。

sudo systemctl restart mysql

CentOSなどのRedHatベースのディストリビューションでは、サービスを再起動します。

sudo systemctl restart mysqld

リモートマシンからユーザーへのアクセスを許可する

次のステップは、リモートユーザーにデータベースへのアクセスを許可することです。

次のように入力して、rootユーザーとしてMySQLサーバーにログインします。

sudo mysql

mysql -uroot -p

MySQLシェル内から GRANT ステートメントを使用して、リモートユーザーにアクセスを許可します。

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

どこ:

  • database_name は、ユーザーが接続するデータベースの名前です。 user_name は、MySQLユーザーの名前です。 ip_address は、ユーザーが接続するIPアドレスです。 % を使用して、ユーザーが任意のIPアドレスから接続できるようにします。 user_password はユーザーパスワードです。

たとえば、IP 10.8.0.5 クライアントマシンからパスワード my_passwd を持つ foo という名前のユーザーにデータベース dbname へのアクセスを許可するには、次を実行します。

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

ファイアウォールの構成

最後のステップは、リモートマシンからポート 3306 (MySQLのデフォルトポート)のトラフィックを許可するようにファイアウォールを構成することです。

Iptables

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

特定のIPアドレスからのアクセスを許可します。

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

UFW

UFWはUbuntuのデフォルトのファイアウォールツールです。 インターネット上の任意のIPアドレスからのアクセスを許可するには(非常に安全ではない)を実行します。

sudo ufw allow 3306/tcp

特定のIPアドレスからのアクセスを許可します。

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallDは、CentOSのデフォルトのファイアウォール管理ツールです。 インターネット上の任意のIPアドレスからのアクセスを許可するには(非常に安全でない)タイプ:

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

特定のポート上の特定のIPアドレスからのアクセスを許可するには、新しいFirewallDゾーンを作成するか、リッチルールを使用します。 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 --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

変更の検証

リモートユーザーがMySQLサーバーに接続できることを確認するには、次のコマンドを実行します。

mysql -u user_name -h mysql_server_ip -p

ここで、 user_name はアクセスを許可したユーザーの名前で、 mysql_server_ip はMySQLサーバーが実行されているホストのIPアドレスです。

すべてが正しくセットアップされていれば、リモートMySQLサーバーにログインできます。

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

以下のエラーは、ログインしようとしているユーザーがリモートMySQLサーバーにアクセスする権限を持っていないことを示しています。

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

結論

デフォルトで最も人気のあるオープンソースデータベースサーバーであるMySQLは、ローカルホストでのみ着信接続をリッスンします。

MySQLサーバーへのリモート接続を許可するには、次の手順を実行する必要があります。

  1. すべてまたは特定のインターフェイスでリッスンするようにMySQLサーバーを構成します。リモートユーザーにアクセスを許可します。ファイアウォールのMySQLポートを開きます。
mysql mariadb