はじめに
web サーバーから DB サーバーにアクセスを許可するときなど、MySQL で外部からのアクセスを許可したいときの設定あれこれを自分用にメモ。
おしながき
DB サーバーにログインして以下の作業を行っていきます。
- MySQL の設定
- MySQL で外部からのアクセス権を持ったユーザーの作成
- firewall の設定
環境
OS: CentOS 7
MySQL: 5.7
MySQL の設定
必要に応じて my.conf を書き換えます。
なお、環境によって my.conf が保存されている場所が違うようです。
自分は /etc/my.cnf
にありました。
【参考】my.cnfの場所を調べる
bind-address
に接続したい IP アドレスを追加。
bind-address = 127.0.0.1
bind-address = 192.168.128.1(この行を追加)
もしくは bind-address
をコメントアウトしてすべての IP アドレスを許可する。
# bind-address = 127.0.0.1
MySQL で外部からアクセスできるユーザーを作成
まずは root でログインします。
新しくユーザーを作成しますが、そのときにアクセスを許可する IP アドレスを指定します。
mysql> CREATE USER "sample"@"192.168.128.1" IDENTIFIED BY [password];
きちんと設定できているか確認してみます。
mysql> SELECT user, host FROM mysql.user
+---------------+-----------------+
| user | host |
+---------------+-----------------+
| sample | 192.168.128.1 |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------------+
sample ユーザーの host に 192.168.128.1
が設定されています。
次に、作成した sample ユーザーに 192.168.128.1
からアクセスできるよう権限を与えます。
mysql> GRANT ALL PRIVILEGES ON *.* TO "sample"@"192.168.128.1";
上記の例では、すべての権限をすべての DB に対して与えています。
firewall の設定
最後に、firewall で IP アドレスと MySQL を許可します。
なお、設定には sudo 権限が必要です。
まずは新しいゾーンを作成します。
$ firewall-cmd --new-zone=sampleZone --permanent
$ firewall-cmd --reload
次に、許可する IP アドレス(192.168.128.1/32
)とサービス(MySQL)を指定します。
$ firewall-cmd --add-source=192.168.128.1 --zone=sampleZone --permanent
$ firewall-cmd --add-service=mysql --zone=sampleZone --permanent
$ firewall-cmd --reload
設定ができたら確認してみましょう。
$ firewall-cmd --list-all --zone=sampleZone
sampleZone (active) # active であることを確認
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.128.1 # IP アドレスが追加されています
services: mysql # MySQLmysql
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
アクセスしてみる
web サーバーから IP アドレスを指定して DB サーバーの MySQL にアクセスしてみます。
$ mysql -h 192.168.128.1 -u sample -p
これでログインできれば成功です。