デフォルトの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に設定されています。
# # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1
bind-address値をに変更します 0.0.0.0
MySQLデータベースサーバーがすべてのネットワークインターフェイスでリッスンできるようにします。
# # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0
変更後の値は上記のようになります。
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!