2012年1月23日月曜日

[vim] mysql接続先をvimから変更するためのunite source

vimからテーブル操作をするためのプラグインdbextを使っているが、
接続するDBがサーバごとコロコロ変えなきゃいけないのがすごくめんどくさい。
DBSetOptionを変えるのも、sshポートフォワーディングの設定をするのも
かなりめんどくさい。

そこで、それらをuniteから一括して設定するためのsourceを書いた。

機能


① 一覧からDBを選択し、dbextのDB接続先やユーザ名パスワードを変更する。
② ローカルでない場合、sshポートフォワーディングの設定をする。
③ その際、すでにsshポートフォワーディングの設定がある場合は、
そのプロセスを停止して、新しいプロセスを立ち上げる。

ソースとインストールと使い方


☆ ソース
kokukuma / vim-unite-mysource
この中にある、mysql_con.vimってのがそれ。

☆ インストール
① gitから落として、.vim/内に配置
② vimprocを使っているので、それもインストールする。
③ .vimrcにmysqlの設定と、ポートフォワードに必要な情報を、以下のように書く。

let g:mysql_con_list = [
    \["0", "local", "root", "password", "dbkokukuma"],
    \["1", "remote1", "kokukuma", "password", "dbkokukuma_tst"],
    \["1", "remote1", "kokukuma", "password", "dbkokukuma_dev"],
    \["2", "remote2", "kokukuma", "password", "dbkokukuma_stg"],
\]
let g:port_forward = [
    \["kokukuma",  "kokukuma.dev.net"  ,"mysqlserver","/home/karino/.ssh/id_rsa" ],
    \["kokukuma",  "kokukuma.net"  ,"mysqlserver","/home/karino/.ssh/id_rsa" ],
\]

g:mysql_con_listの形式は、
[sshポートフォワード設定番号],[unite表示名],[DB接続ユーザ名],[DB接続パスワード],[接続先DB名]
sshポートフォワード設定番号は、0のときlocalhost、1以降は、g:port_forwardに対応する。

g:port_forwardの形式は、
[ssh接続ユーザ名],[sshサーバ],[DBサーバ],[秘密鍵パス]
DBサーバ名は、sshサーバから見たときの名前にする。


☆ 使い方

① vimを起動して、「:Unite mysql_con」と入力すると、以下のように、
設定した接続先mysql一覧が表示される。

② これを選択すると、dbextの設定、sshポートフォワーディングの設定が切り替わる。




引っかかった点


① sshポートフォワード
以下のように接続する環境。
ローカルホスト → sshサーバ → DBサーバ
sshサーバ :kokukuma.net
DBサーバ :mysqlserver

ssh -N -L 13306:mysqlserver:3306 karino@kokukuma.net -i /home/karino/.ssh/id_rsa
13306 : ポートフォワードに使用するローカルの任意ポート
mysqlserver : sshサーバから見たDBサーバ名
3306 : DBサーバの接続先ポート


ここらへんを参考にした。
SSH ポートフォワードで MySQL サーバにログインするときのメモ
SSHでポートフォワード


② sshポートフォワードのプロセス取得
いろいろ迷走した挙句、こんな形になるが、要検討。
ps -ax > ~/.tmpfile
cat ~/.tmpfile|grep 'ssh -N -L' && rm ~/.tmpfile
rm ~/.tmpfile

③ vimからbashコマンドを実行し、その戻値を取得

vimprocってプラグインを使わないと難しいらしい。

Shougo / vimproc
コンパイルが必要なので要注意。
cd ~/.vim/bundle/vimproc
make -f make_gcc.mak

0 件のコメント:

コメントを投稿