2019-06-25

【Amazon Lightsail】インスタンス上のMySQLに外部からSSH接続する

前提

  • Lightsailインスタンス上にMySQLが設置済み
    • LAMPイメージもしくはNginxイメージであればデフォルトで入ってます。
  • ローカルにMySQL Workbench あるいは Sequel ProなどのMySQLクライアントがダウンロード済み

本記事ではMySQL Workbenchを使っていますが他のものでも同様にできるはずです。

MySQLで接続用ユーザーを作る

  1. LightsailインスタンスにSSHログイン

  2. MySQLに接続(デフォルトのパスワードは ~/bitnami_application_password に書いてあります)

Console

mysql -u root -p
  1. ユーザー一覧を確認します。

MySQL Console

SELECT user,host FROM mysql.user;
  1. 以下のように出力されます。
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+

外部からSSH接続する際、使用するUserのHostは localhost ではなく 127.0.0.1 である必要があるため、新規ユーザーを作成します。これは、 localhost の場合は接続の際にUNIXソケットが使用されてしまうからです。 127.0.0.1 と明示することでTCPで接続されるようになります。自分はここでめちゃくちゃつまづきました。(MySQLにおける localhost ≠ 127.0.0.1 は常識らしいです…義務教育で教えてほしかった…)

ホスト名が localhost だった場合、パフォーマンスのためなのかソケットが暗黙で使用されます。

参考: https://qiita.com/TanukiTam/items/f6a08740d0fcda0db7be

以下に簡単な手順を示します。ユーザー名やパスワード、権限等は適宜変更してください。

MySQL Console

# 仮のDB作成
CREATE DATABASE sample_db;
# 接続用ユーザー作成
CREATE USER 'ryo'@'127.0.0.1' IDENTIFIED BY 'yourpassword';
# 権限の付与
GRANT ALL ON sample_db.* TO 'ryo'@'127.0.0.1';

これでMySQL側の設定は完了です。

MySQLクライアントの接続設定

lightsail_mysql

MySQLクライアント(画像はMySQL Workbench)の新規接続作成画面を開き、以下のように設定します。

  • Connection Method: Standard TCP/IP over SSH を選びます。
  • SSH Hostname: LightsailのPublic IPアドレスの22番ポートを指定します。
  • SSH Key File: インスタンス作成時に入手した xxx.pem ファイルを指定します。パスワードは不要です。
  • MySQL Hostname: 127.0.0.1:3306
  • MySQL Server Port: 3306
  • MySQL Username: 先ほど作成したユーザーの名前
  • MySQL password: 先ほど作成したユーザーのパスワード

Test Connection を押して、以下のようにポップアップが出れば接続成功です!

lightsail_mysql