インフラ

MySQLに外部接続できない時のチェックポイント

MySQLはデフォルトでは外部ホストからの接続を許可しない設定になっています。「MySQLを別サーバーで建てたのに、外部サーバーからアクセスできない。さて困ったな。どうしよう。」となった時にチェックするポイントをまとめてみました。

MySQLの外部接続が上手くいかない場合のチェックポイント

外部ホストから確認する方法 基本編

まずはコマンドを叩いてログインできるか確認してみましょう!以下のコマンドを実行することで外部ホストからMySQLにログインすることができます。

mysql -h <IPアドレス> -u <ユーザ名> -p

MySQLを外部サーバーで立てて別サーバーからアクセスして見る場合、まずこのコマンドを叩いてみてください。「ああ、やっぱりアクセスできない。」ってなりましたら、設定でつまずいている可能性大なので原因を探っていきます。

mysqlコマンドでログインできない場合のチェックポイント4つ

だいたい以下の4項目をチェックすると、どこが原因なのかわかります。

  1. 外部サーバーへpingコマンドを叩く
  2. 外部サーバーに直接ログインし、サーバー上でMySQLにアクセス
  3. /etc/mysql/my.cnfの確認
  4. サーバーのファイヤーウォールの設定を確認

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を確認していく

  1. ポート番号
  2. bind-address
bind-address = 127.0.0.1

となっている場合、localhostからしかアクセスできないため接続したいマシンのIPアドレスに変更する

bind-address = (接続したいマシンのIPアドレス)

4. サーバーのファイヤーウォールの設定を確認

AWS や IDCF Cloud や さくらVPSなどの管理画面にて、ファイアウォールがかかっていないか確認する。
MySQLのために開放しているポート番号が許可されていることをチェック

-インフラ
-