AUTOVICE

TECH BLOG

MySQL Workbenchでリモートサーバー上のMySQLにSSH接続する方法【接続できない場合の対処法あり】

2021-02-13

はじめに

無料で使えるデータベースのうち、MySQLはとても使いやすく人気があるので多くの人に使われています。

リモートサーバー上に構築したMySQLのデータを見たいときに、ローカルコンピューターからリモートサーバーに接続し、リモートサーバー上でMySQLに接続する方法があります。しかし、この方法を毎回行うのは面倒ですし、SQLの実行結果がテキストベースなのでわかりにくいという欠点があります。

MySQL Workbenchというデータベース設計ツールを使えば、簡単にリモートサーバー上のMySQLに接続できます。

MySQL Workbenchとは?

MySQL Workbenchは、SQL開発、管理、データベース設計、作成、および保守をMySQLデータベースシステムの単一の統合開発環境に統合するビジュアルデータベース設計ツールです。 ウィキペディア(英語)

Mac向けのMySQL対応データベース設計ツールは他にphpMyAdminやSequel Proがありますが、MySQL Workbenchは公式が提供しているだけあって最も使いやすいツールだと思います。

Macのダークモードにも対応しています。

前提となる構成例

リモートサーバー上にMySQLが構築済みで、リモートサーバーにはローカルコンピューターからSSH接続できる状態であるとします。

MySQL WorkbenchでMySQLに接続する

MySQL Workbenchのインストール

MySQL Workbenchの公式サイトにアクセスします。

「ダウンロードはこちら」をクリックします。

「Download」ボタンをクリックします。

「Login」ボタンをクリックします。

「ユーザー名」と「パスワード」を入力し、Oracleプロファイルにサインインします。

「Download Now」ボタンをクリックします。

ダウンロードが完了したらファイルを開き、MySQL Workbenchをアプリケーションに追加します。

これでMySQL Workbenchがインストールできました。

MySQL Workbenchの設定

SSH接続情報の事前確認

MySQL Workbenchの設定で必要となるリモートサーバーへのSSH接続情報を事前に確認しておきます。

$ cat ~/.ssh/config
Host remote-server
  HostName xxx.xxx.xxx.xxx
  User user
  Port 10022
  IdentityFile  ~/.ssh/remote-server/id_rsa

MySQL接続の作成

MySQL Workbenchを起動します。真ん中あたりにある「MySQL Connections」の横の「+」ボタンをクリックします。

新しい接続の作成ウインドウで、「Connection Method」を「Standard TCP/IP over SSH」に変更します。

各パラメーターを以下の通り設定します。

パラメーター 設定値
Connection Name 任意の名前
SSH Hostname リモートサーバーのIPアドレスとポート番号
SSH Username SSH接続のユーザー名
SSH Password SSH接続のパスワード
SSH Key File SSH接続の鍵ファイル
MySQL Hostname 127.0.0.1
MySQL Server Port 3306
Username root
Password MySQLのパスワード
Default Schema データベース名

各パラメーターが入力できたら「Test Connection」ボタンをクリックします。表示されたウインドウで「Password」を入力します。

テスト接続が成功すると以下のように表示されます。

MySQL接続設定が作成できました。作成した接続設定はMySQL Workbenchに保存されているので、次からはその接続設定をクリックするだけでリモートサーバー上のMySQLに接続できます。

接続できない場合

正しく設定したにもかかわらずMySQLに接続できない場合があります。最後のテスト接続を行うとエラーメッセージが表示されるという場合、以下の手順を参考にしてみてください。

リモートサーバーにSSH接続します。

$ ssh remote-server

コマンドラインからMySQLにログインします。

$ mysql -uroot -p
Enter password: 
...

mysql>

現在のユーザー権限を確認します。

mysql> SHOW GRANTS;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

ALL PRIVILEGES ON *.* TO root@localhostというユーザー権限は、「接続元がlocalhostのrootユーザーはすべての権限を持っている」という意味になります。

MySQL Workbenchでは、まずリモートサーバーにSSH接続し、リモートサーバーから自身の中にあるMySQLに接続しています。通常だったらroot@localhostというユーザー権限だけで接続できるはずです。しかし、環境や設定によっては接続元が外部のユーザー権限でないと接続エラーになることがあります。

ユーザー権限を追加するには以下のコマンドを実行します。

mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected, 1 warning (0.00 sec)
コマンド 意味
GRANT 権限を与える
ALL すべての権限(CRUD)
*.* 全データベースの全テーブル
root@'%' すべての接続元のrootユーザー('%'はワイルドカードで、使用する場合は''で囲む)
IDENTIFIED BY rootユーザーの場合はパスワードが必須

上記のコマンド例はかなりセキュリティリスクの高いユーザー権限ですので、実際には権限や対象のデータベースを絞ったり、root以外のユーザーにすることをおすすめします。

mysql> SHOW GRANTS FOR root@'%';
+-------------------------------------------+
| Grants for root@%                         |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)

ユーザー権限が追加されました。

ユーザーやユーザー権限の削除

間違って必要ないユーザーやユーザー権限を作成してしまった場合のために、それらを削除するコマンドも載せておきます。

ユーザーの削除。

mysql> DROP USER root@'%';

ユーザー権限の削除。

mysql> REVOKE ALL ON *.* FROM root@'%';

このコマンドはユーザー権限だけ削除されるため、ユーザーは残ります。USAGEはユーザー権限がなにもないことを意味します。

mysql> SHOW GRANTS FOR root@'%';
+----------------------------------+
| Grants for root@%                |
+----------------------------------+
| GRANT USAGE ON *.* TO 'root'@'%' |
+----------------------------------+
1 row in set (0.01 sec)

まとめ

MySQL Workbenchのインストールと接続設定の作成について解説しました。

MySQL Workbenchは直感的にわかりやすいUIで、非常に使い勝手のいいデータベース設計ツールです。MySQLは使っているけどMySQL Workbenchは使ったことがないという人は参考にしていただければと思います。