MySQL Workbench [Cannot start SSH tunnel manager]

MySQLを利用する場合に便利なGUIツールとして、いままでは前身のMySQL Administrator一式を利用していましたが、本格的に運用するに当たってMySQL Workbenchをインストールすることにしました。


バージョンと利用環境は以下の通り
MySQL Workbench 5.2.40 (32bit MSI Installer)
Windows7 SP1 64bit


やってみると、見事にはまったのでメモしときます。
まず、起動はするのですがDBに接続しようとすると以下のエラーが出ます。

[Cannot start SSH tunnel manager]

多発するエラーのようでGoogleで検索するとかなりの情報がヒットします。
おおむね、Python環境が他のシステム等とコンフリクトしているので環境変数を設定しろとか、Pythonを別にインストールすればいいとか、そんな感じです。


いろいろやってみましたがさっぱり解決しないので根本原因を探ってみると、MySQL Workbenchが、Pythonプログラムの sshtunnel.py を呼び出して、そのプログラム内で import socket がエラーを出していることが判りました。
正確には、 socketが呼び出した import _socket がDLLを読み込めないようです。


確認方法は、MySQL Workbenchから、Scripting -> Run Workbench Scripting File と選んで、sshtunnel.py を実行します。
正常動作の場合は、Script finished. と終わりますが異常動作の場合はDLLが読み込めない旨のエラーが出ます。(日本語が文字化けしてますが)


pythonは詳しくないのですが、socketは標準ライブラリのようなので環境変数とかそういう問題ではなさそうです。実際に、環境変数を表示するようにして確認してみましたがすべてパスは通っている状況でもエラーがでます。
環境変数(パス)を表示するには、以下のプログラムもしくはコマンド入力で確認できます。
import sys
print sys.path


問題の切り分けとして、本家のPython2.7.3(32bit)をインストールしてコマンドプロンプトから import socket を実行してみると、パスが通っていれば正常に動きます。
ちなみに、本家のPython2.7.3は、C:\python27にインストールしようとしますがここだと64ビットシステムの保護が働いてしまうのでC:\Program Files (x86)\python27にインストールします。


次に、MySQL Workbenchに入っているPythonコマンドラインで動かして、import socketを実行してみると、これもパスが通っていれば動きます。内部のPythonバージョンは2.7.1でした。


どうもMySQL WorkbenchからPythonを起動すると何かがおかしいみたいです。
今インストールされているMySQL AdministratorやEclipse系のシステムもPythonを利用しているようなのでこの辺りの依存?64ビットシステムの検証不足か、Python2.7.1に問題があるのか・・・。
面倒になりました。さっぱり判りません・・・。


ということで、荒技です。
先ほどインストールした本家Python2.7.3のバイナリをMySQL Workbenchのpythonフォルダに移植してみました。


具体的には、MySQL Workbenchのpythonフォルダをリネームしてpython2.7.3のフォルダごとコピー、足りない中身をリネームしたオリジナルフォルダから移植。
さらに、MySQL Workbenchフォルダにある python.exe とpython27.dllをそれぞれ2.7.3のものに入れ替え。python27.dllはc:\Windows\SysWOW64\からもってきました。


さっくりと動きました。
まだ使い込んでいないのでどこでエラーがでるか判りませんが今のところ問題なしです。
検証の過程で環境変数(パス)を通していましたが、消しても動くようなのでやはり環境変数の問題ではなさそうです。


もっとスマートな解決方法があるはずですが、動いてしまうとモチベーションが・・・