VirtualBox Vagrant上のMySQLにHeidiSQLで接続する方法

heidisql_logo

※当ブログではアフィリエイト広告を利用しています。

最近の開発環境構築のトレンドを知るため、仮想化ソフト「VirtualBox」と開発用の仮想環境を簡単に構築できる「Vagrant」で、PHPとMySQLの開発環境を整えてみました。

ホストPCからVagrant上のMySQLを操作するため、MySQLクライアントソフト「HeidiSQL」を使用してみたのですが、接続する際に少しハマったので方法をメモします。

HeidiSQLとは?

MySQLデータベースを管理できる無料のソフトウェアです。
GUIベースで動作が軽く、データベース・テーブルの作成やクエリの実行など、データベース管理のための機能は一通り使えます。

HeidiSQL オフィシャルサイト
http://www.heidisql.com/

高機能なMySQLフロントエンド「HeidiSQL」- MOONGIFT
http://www.moongift.jp/2009/09/heidisql/

Vagrant上のMySQLへの接続方法

ゲストPCの(Vagrant上)のMySQLにはSSHトンネル(ポートフォワード)を使って接続します。
ゲストPCのMySQLポート(3306)を解放していなくても、SSH経由で接続することができます。

ホストPC・ゲストPCは以下のような環境です。

ホストPC:Windows7, HeidiSQL 8.0.0.4396
ゲストPC:Ubuntu 12.04 LTS, PHP 5.3.10, MySQL 5.5.31,Nginx 1.1.19

MySQL接続設定

ネットワーク種別:MySQL(SSH tunnel)
ホスト名/IP:localhost
ユーザー:root
パスワード:空欄
ポート:3306
MySQL接続設定

SSHトンネル設定

SSHトンネルにはWindows用のコマンドラインSSHクライアント「plink.exe」が必要です。
下記ページよりダウンロードし、任意のフォルダに格納しておきます。
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

plink.exeの場所:[先の手順でダウンロードしたplink.exeのパス]
SSHホスト + ポート:localhost:2222
ユーザー名:vagrant
パスワード:vagrant
ローカルポート:3307
HeidiSQL SSHトンネル設定

これで接続できるはずなのですが、以下のエラーが出て接続できません。

SQL Error (2003) in statement #0: Can’t connect to MySQL server on ‘localhost’ (10061)

接続エラー

調べたところplink.exeへ渡しているパラメータが関係しそうなのですが、解決法がわからなかったので認証キーをレジストリにキャッシュすることで対応しました。

下記コマンドを実行します。(plink.exeのパスは先の手順でダウンロードしたplink.exeのものに読み替えてください)

"C:\Program Files\putty\PLINK.EXE" -ssh vagrant@localhost -pw "vagrant" -P 2222 -N -L 3307:localhost:3306

plinkコマンド実行
すると、Store key in cache? (y/n)と聞かれるので「y」を入力します。
レジストリに認証キー情報がキャッシュされます。
レジストリキャッシュ
HeidiSQLの設定画面に戻り、「開く」ボタンを押下するとMySQLへの接続が完了しました。
認証キー情報がキャッシュに存在する限り、接続が可能です。
MySQLへの接続完了
ためしにSELECT文を実行してみたところ、結果がグリッドに見やすく表示されました。
SELECT文実行結果

おわりに

Windows環境でもGUIで快適にMySQLデータベースの操作ができるようになりました。
SSHトンネルとplink.exeの設定については腑に落ちない点があったので、解決法がわかる方は教えて頂けると助かります。