MySQLはデフォルトでは外部ホストからの接続を許可しない設定になっています。「MySQLを別サーバーで建てたのに、外部サーバーからアクセスできない。さて困ったな。どうしよう。」となった時にチェックするポイントをまとめてみました。
外部ホストから確認する方法 基本編
まずはコマンドを叩いてログインできるか確認してみましょう!以下のコマンドを実行することで外部ホストからMySQLにログインすることができます。
mysql -h <IPアドレス> -u <ユーザ名> -p
MySQLを外部サーバーで立てて別サーバーからアクセスして見る場合、まずこのコマンドを叩いてみてください。「ああ、やっぱりアクセスできない。」ってなりましたら、設定でつまずいている可能性大なので原因を探っていきます。
mysqlコマンドでログインできない場合のチェックポイント4つ
だいたい以下の4項目をチェックすると、どこが原因なのかわかります。
- 外部サーバーへpingコマンドを叩く
- 外部サーバーに直接ログインし、サーバー上でMySQLにアクセス
- /etc/mysql/my.cnfの確認
- サーバーのファイヤーウォールの設定を確認
1. 外部サーバーへpingコマンドを叩く
外部サーバーとそもそもやりとりが可能か確認する
$ ping XXX.XXX.XXX.XXX (外部サーバーのIPアドレス)
2. 外部サーバーに直接ログインし、サーバー上でMySQLにアクセス
pingを確認し外部ホストの通信がOKと確認できたら、サーバーMySQLにアクセスできるか確認します。実際にMySQLにアクセスし、ポートとユーザを確認します。
MySQLのポート番号を確認
外部ホストへアクセスする際のポート番号を確認します。
MySQLはデフォルトでTCPポート3306が空いているか確認するため、以下のコマンドをMySQL上で実行
mysql> show variables like `port`;
MySQLのホストとユーザを確認
ユーザの権限とホストのIPアドレス制限を確認していく
mysql> select host, user from mysql.user;
ワイルドカード%
だと全てのIPアドレスからアクセス可
3. /etc/mysql/my.cnfの確認
MySQLの設定ファイルであるmy.cnfを確認していく
- ポート番号
- bind-address
bind-address = 127.0.0.1
となっている場合、localhostからしかアクセスできないため接続したいマシンのIPアドレスに変更する
bind-address = (接続したいマシンのIPアドレス)
4. サーバーのファイヤーウォールの設定を確認
AWS や IDCF Cloud や さくらVPSなどの管理画面にて、ファイアウォールがかかっていないか確認する。
MySQLのために開放しているポート番号が許可されていることをチェック