諸事情があり MySQL サーバーに他のサーバーから接続する必要が出てきた。しかし MySQL 標準ではローカルホストからの接続のみ許可しているようだ。接続しようとすると以下のようなエラーが出ると思う。
ERROR 1130 (HY000): Host '203.0.113.1' is not allowed to connect to this MySQL server
ERROR 1045 (28000): Access denied for user 'hoge'@'203.0.113.1' (using password: YES)
このページでは MySQL サーバーへ他の端末から接続できるようにする方法を紹介する。
ファイアウォールで MySQL を許可する
まずは MySQL ではなく OS に搭載されているファイアウォールの設定を変更して MySQL の通信を通るようにする。自分のサーバーは Ubuntu を利用しているため、UFW の設定を変更する。
$ sudo ufw allow 3306
$ sudo ufw status
Status: active
To Action From
-- ------ ----
Nginx Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
3306 ALLOW Anywhere
MySQL サーバーの設定ファイルで他のアドレスを許可する
次に MySQL サーバの設定ファイルより bind-address をコメントアウトして接続できる IP アドレスの制限をはずす。
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# コメントアウトする
#bind-address = 127.0.0.1
変更したら mysql サーバーを再起動しよう。
$ sudo service mysql restart
データベースへのアクセス権限を与える
MySQL サーバーにログインしてデータベースへのアクセス権限を追加する。
$ sudo mysql -u root -p
mysql> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| hoge | localhost |
| fuga | localhost |
| root | localhost |
+------------------+-----------+
デフォルトではこのように localhost のみ接続可能となっているので、ここに IP アドレスを追加してやる。
mysql> grant all privileges on hoge.* to hoge@"203.0.113.1";
mysql> flush privileges;
mysql>
mysql> select user,host from mysql.user;
+------------------+-------------+
| user | host |
+------------------+-------------+
| hoge | 203.0.113.1 |
| hoge | localhost |
| fuga | localhost |
| root | localhost |
+------------------+-------------+
IP アドレスの部分を % にすると全ての IP アドレスから許可される。
ここまで設定できれば MySQL サーバーへアクセスできると思う。