開発チーム内で仮想サーバが必要になり、Vagrant使って構築した時に、MySQLをGUIクライアントで接続しようとした時に、問題点の特定に苦労したので。
ここで説明する内容
すでに接続先(ここでは、Vagrant&Virtualboxで動いている仮想OS)が存在し、MySQLもSSHも利用できる状態とする。
接続元は、仮想OSを動かしている
- MySQLに、外部接続用のユーザ設定を行う。
- iptablesの設定。
- SequelPro(Mac上のクライアントツール)の接続用の設定。
MySQLに、外部接続用のユーザ設定を行う
仮想サーバ内のMySQLに、ユーザを作成する。
まず、ユーザ一覧を確認してみる
(パスワードは適当です)
mysql> select user, host, password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | (秘密) |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| root | ::1 | |
+------+-----------------------+-------------------------------------------+
この状態から、rootユーザで、192.168.xxx.yyy (ローカルネットワーク内)から接続できるように設定を変更します。
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"192.168.%" IDENTIFIED BY 'pass' WITH GRANT OPTION;
上記コマンドは、ipv4形式のアドレスで192.168.〜の値を持つもの(192.168.1.10 とか 192.168.20.30とか色々)rootというユーザ名でpassというパスワードでアクセスした場合、すべての権限とオプションを付与する。
という意味合いになります。
(あくまで、ごくごく内輪の開発環境なので、こんな適当な設定にしてますが)
mysql> select user, host, password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | (秘密) |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| root | ::1 | |
| root | 192.168.% | (秘密) |
+------+-----------------------+-------------------------------------------+
5 rows in set (0.00 sec)
ポートも確認しておく
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.00 sec)
ポートは 3306 です。この後の設定作業で使います。
iptablesの設定
今回は、atlas(公式のbox配布場所?)で公開されているcentos-6.7(64bit) のボックスを使いましたが
https://atlas.hashicorp.com/bento/boxes/centos-6.7
iptablesの設定ファイル
/etc/sysconfig/iptables
は、存在しないので作成する必要があります。(なぜないんだ・・・)
別途使っていた仮想環境の内容をもとに、こんな感じで記述しました。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 8082 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
ここで大事なのは
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
の部分です。MySQLのポート(3306)を許可することが大事。
SequelPro(Mac上のクライアントツール)の接続用の設定。
接続元に戻ります。
SequelProはすでにインストールされているものとします。
接続情報の設定はSSHを選択し
- 名前 :任意の分かりやすい名前
- MySQLホスト :MySQLが稼働しているサーバのIPアドレス
- ユーザ名 :上記ホストに接続する際のユーザ名
- パスワード :上記ユーザのパスワード
- データベース :どのデータベースに接続するか?(今回は指定しない)
- ポート :接続する際に使用するポート
- SSHホスト :SSH接続する際のホスト
- SSHユーザ :SSH接続する際のユーザID
- SSHパスワード :上記SSHユーザのパスワード または秘密鍵
- SSHポート :SSH接続時に使うポート
というわけなので、
ここまでの環境設定で、仮想サーバに割り振るIPが192.168.100.200。SSH接続についてはvagrantのデフォルトユーザを使うとした場合。
- 名前 :(設定そのもには関係ない)
- MySQLホスト :192.168.100.200
- ユーザ名 :root
- パスワード :root
- データベース :(指定しないので空欄のまま)
- ポート :3306
- SSHホスト :192.168.100.200
- SSHユーザ :vagrant
- SSHパスワード :vagrant
- SSHポート :22
この設定で接続する。
注意:SSHユーザは、デフォルト以外の方が良さそう。