2019年4月3日水曜日

innotopにmy.cnfや.mylogin.cnfを食わせる方法

TL;DR

  • 何も設定しなくても食うけど、 [client] セクションしか読んでくれないので「読んでない」と思われることが多いっぽい
  • それ以外のセクションを食わせるためには ~/.innotop/innotop.conf に記述が必要だけど割と簡単だよ

innotop はPerl5製で DBD::mysql を使っているので、デフォルトファイルの読み込みは mysql_read_default_filemysql_read_default_group あたりに影響を受ける。
…と思って探してみれば割とさっくり見つかって、
あたりがそうなんだけど前後を読んでみるとどうも コマンドラインオプションからこれらを直接指定する方法はない
じゃあどうやって指定するかというと、「コンフィグファイルからコネクションのDSNを読みだそうとして、読み出せなければ渡されたオプションとかからDSNを作って mysql_read_default_group=client をくっつけて使う」ような作りになっているので、そもそもコンフィグファイルに好きなセクションを読みだすような(そして、それだけの) DSNを作ってやれば上手くいきそう。
(俺の手元では、何故か innotop.conf の先頭をからっぽの行にしてやらないとダメだった…)
というわけで、
$ cat ~/.innotop/innotop.conf

[connections]
test=dsn=dbi:mysql:;mysql_read_default_file=/home/yoku0825/hoge.cnf
こんな感じに書くと、 /home/yoku0825/hoge.cnf[client] セクションを読むし( mysql コマンドラインクライアントの --defaults-file と同じで、ファイルを指定するとそれ以外のデフォルトパスのコンフィグは読まない)
$ cat ~/.innotop/innotop.conf

[connections]
test=dsn=dbi:mysql:;mysql_read_default_group=innotop
こんな感じに書くと( mysql_read_default_file を指定していないので) /etc/my.cnf, /usr/local/mysql/my.cnf, .., ~/.my.cnf, ~/.mylogin.cnf の順で [innotop] セクションを読むようになる。
もちろん両方同時に指定しても動く。

しかしあの、この動作を調べてたらこんなの( DBD::Pg をサポートしようとする努力) を見つけたんだけど、 maakitの名残 みたいだった。歴史を感じる。

0 件のコメント :

コメントを投稿