MySQLへのリモート接続を許可する方法

デフォルトのMySQLサーバーはローカルホストでのみリッスンします。 つまり、リモートシステムからMySQLに接続することはできません。 これは、セキュリティの目的でも良い習慣です。

多くの場合、リモートシステムからMySQLデータベースにアクセスする必要があります。 データベースサーバーに個別のインスタンスを使用する本番環境の最も可能性の高いケース。 また、負荷分散環境でホストされているアプリケーションの場合、複数のシステムからアクセスできる単一の集中型データベースサーバーを作成します。

このチュートリアルは、リモートシステムからの接続を許可するようにMySQLサーバーを構成するのに役立ちます。

ステップ1-MySQLサービスを構成する

デフォルトのMySQLサーバーはローカルホストインターフェースでのみリッスンします。 すべてのインターフェイスでリッスンするには、これを変更する必要があります。

MySQLデータベースサーバー構成ファイルをテキストエディタで編集します。 Debianベースのシステムには、/ etc / mysql / mysql.conf.d /mysqld.cnfにMySQL構成フィールドがあります。 MySQL構成ファイルを編集しましょう:

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

ファイル内のバインドアドレス設定を検索します。 デフォルトのbind-addressは、以下のように127.0.0.1に設定されています。

bind-address値をに変更します 0.0.0.0 MySQLデータベースサーバーがすべてのネットワークインターフェイスでリッスンできるようにします。

変更後の値は上記のようになります。

MySQL 8データベース構成ファイルには、bind-address設定は表示されません。 したがって、バインドアドレスを手動で追加する必要があります [mysqld] 鬼ごっこ。

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
bind-address    = 0.0.0.0

構成ファイルを保存して閉じます。

MySQLサービスを再起動して、変更を適用します。

systemctl restart mysql.service 

ここで、変更を確認すると、MySQLがすべてのリモートホストからリッスンしています。 次のコマンドを実行して、サービスステータスを表示します。

netstat -tulpn  | grep -e "Local Address" -e "mysql"  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1698595/mysqld tcp6 0 0 :::33060 :::* LISTEN 1698595/mysqld

MySQLが現在リッスンしていることがわかります 0 0.0.0.0:3306 ローカルアドレス。 これは、サーバーがポート3306のすべてのネットワークインターフェイスでリッスンしていることを意味します。

ステップ2–リモートアクセスでMySQLユーザーを作成する

次に、リモートホストから接続するMySQLユーザーを作成する必要があります。

mysql> CRATE USER 'username'@'remote_server_ip_or_hostname' IDENTIFIED BY 'pa$$word';
  • username –MySQLサーバーへのログインに使用されるユーザーアカウントの名前
  • remote_server_ip_or_hostname –これは、ユーザーがmysqlサーバーに接続できるリモートホストのIPアドレスまたはホスト名です。

リモートホストの代わりに「%」を使用して、任意のリモートホストを許可することもできます。 例えば:

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'pa$$word';

または、次のコマンドを使用して、リモートホストからのみ接続する新しいユーザーアカウントを作成することもできます。

mysql> GRANT ALL on *.* TO 'username'@'remote_server_ip_or_hostname';

実行中のMySQLサーバーに権限をリロードします。

mysql> FLUSH PRIVILEGES;

この時点で、リモートホストからリッスンするようにMySQLサーバーを構成しました。 リモートホストからの認証に使用されるMySQLユーザーアカウントを作成しました。

次に、セキュリティグループまたはシステムファイアウォールを調整して、リモートシステムのMySQLポートを開きます。

ステップ3–ファイアウォールを調整する

システムファイアウォールを変更する前に、クラウドホスティング環境で実行されているシステムには、ホスティングサービスに基づいてMySQLポートを開くための更新セキュリティグループが必要です。

次に、システムファイアウォールでポートを開く必要があります(アクティブな場合)。 たとえば、ほとんどのLinuxシステムはfirewalldを選択し、Debianベースのシステムのような一部のシステムはUFWファイアウォールを使用しています。

オペレーティングシステムに基づいてファイアウォールを更新します。

FirewallDの使用

FirewallDは、CentOSおよびRedHatベースのシステムのデフォルトのファイアウォールサービスです。 次のコマンドを使用して、MySQLポート3306をすべての人に開くことができますが、実稼働サーバーにはお勧めしません。

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

本番サーバーは、必要なホストに対してのみポートを開くことをお勧めします。 FirewallDは、豊富なルールを使用して、特定のIPアドレスまたはネットワークに対してのみ特定のポートを開くことができます。 例えば:

firewall-cmd --permanent --zone=public --add-rich-rule="
  rule family="ipv4"
  source address="192.168.0.0/24"
  port protocol="tcp" port="3306" accept" 

必要なルールをfirewalldに追加した後、実行時に変更を適用するために必ずリロードしてください。

sudo firewall-cmd --reload 

UFWの使用

UFW(Uncomplicated Firewall)は、UbuntuおよびDebianシステムのデフォルトのファイアウォールツールです。 次のコマンドを使用して、すべてのユーザーからポート3306を開くことができます。

sudo ufw allow 3306/tcp 

ただし、プロダクションユーザーは、特定のIPまたはネットワークに対してのみポートを開くことをお勧めします。 特定のIPアドレスからのアクセスを許可するには、次のようなコマンドを使用します。

sudo ufw allow from 192.168.0.0/24 to any port 3306 

必ずネットワークまたはシステムのIPアドレスで192.168.0.0/24を変更してください。

結論

このチュートリアルは、リモートホストからのリモート接続を受け入れるようにMySQLsererをセットアップするのに役立ちました。 また、リモートホストからの接続を許可するMySQLユーザーアカウントを作成しました。

Hope this helps!

Source link