（俺得）MySQLに、クライアントでリモート接続する時の設定

開発チーム内で仮想サーバが必要になり、Vagrant使って構築した時に、MySQLをGUIクライアントで接続しようとした時に、問題点の特定に苦労したので。

# ここで説明する内容

すでに接続先（ここでは、Vagrant&Virtualboxで動いている仮想OS）が存在し、MySQLもSSHも利用できる状態とする。

接続元は、仮想OSを動かしている

1. MySQLに、外部接続用のユーザ設定を行う。
2. iptablesの設定。
3. SequelPro（Mac上のクライアントツール）の接続用の設定。


# MySQLに、外部接続用のユーザ設定を行う

仮想サーバ内の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:追加されたのを確認した。
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:ポートを確認する。
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`
は、存在しないので作成する必要があります。（なぜないんだ・・・）

別途使っていた仮想環境の内容をもとに、こんな感じで記述しました。

```vi:/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ユーザは、デフォルト以外の方が良さそう。