xyk blog

最近は iOS 開発の記事が多めです。

MySQLにリモートホストから接続できるようにする

環境:
Ubuntu 12.04 LTS (32bit)
MySQL 5.5

MySQLこちらでインストール済み。
前提として開発環境として使うのでセキュリティについては考慮しない。

iptables の変更

MySQL が使う3306ポートの開放が必要だが今回は Firewall をオフにして対応する。 iptablesを確認。

$ sudo ufw status
Status: inactive

元々無効となっていた。

Firewall ON/OFF にする方法
$ sudo ufw enable
$ sudo ufw disable

MySQL の bind-address 変更

netstat でポートを確認。

$ netstat -ant

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

127.0.0.1 で LISTEN してるので外部から接続できない。

/etc/mysql/my.cnfbind-addressコメントアウトする。

#bind-address            = 127.0.0.1

MySQL のユーザ権限変更

接続許可ユーザの確認。

mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | ::1       |
|                  | localhost |
| debian-sys-maint | localhost |
| root             | localhost |
|                  | vm-node1  |
| root             | vm-node1  |
+------------------+-----------+
7 rows in set (0.00 sec)

接続を許可するユーザ、ホストを指定して grant 文を実行する。(rootユーザでパスワードなし)

grant all privileges on *.* to root@'192.168.%';
grant all privileges on *.* to root@'172.%';
flush privileges;

MySQL 再起動

最後に MySQL を再起動して設定を反映する。

sudo /etc/init.d/mysql restart

確認。

$ netstat -ant

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN
mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | 172.%     |
| root             | 192.168.% |
| root             | ::1       |
|                  | localhost |
| debian-sys-maint | localhost |
| root             | localhost |
|                  | vm-node1  |
| root             | vm-node1  |
+------------------+-----------+
9 rows in set (0.00 sec)