innotopでMySQL状態をtop風に表示(グループ単位で!)

innotopMySQLの状態をtop風に表示するコマンドです。


DBを1台ずつ見ていくぶんには特に使う必要性を感じなかったのですが、
サーバのグルーピング&一括表示機能があることを知ってこれはけっこう便利なのでは?と思いなおしたので
インストールからグループ設定までについて書いてみます。

サンプルイメージ

グループ単位でクエリーリストを表示

グループ単位でレプリケーション状態を表示


インストール

ここからダウンロードしてインストールします。
※今回使ったのはinnotop1.8 & CentOS5.Xです。

依存モジュールのインストール
# yum install perl-DBI perl-DBD-mysql
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# yum install perl-TermReadKey

もちろんcpanインストールでも

innotopのインストール
# wget http://innotop.googlecode.com/files/innotop-1.8.0.tar.gz
# tar xvzf innotop-1.8.0.tar.gz
# cd innotop-1.8.0
# perl Makefile.PL
# make install

innotopコマンドが起動できればOKです
うまくインストール、起動できない場合はこのへんのどれかやればいけるかも

# yum install perl-Time-HiRes
# yum install perl-ExtUtils-MakeMaker
# yum groupinstall "Development Tools" "Development Libraries"

使ってみる

innotopを起動後、『?』を押すとヘルプ画面が出るので随時参照しましょう。
(あとは「man innotop」OR「perldoc innotop」、そして「ソース読め」です!)

上から「動作モード」、「アクション」、「その他(接続先切り替えなど)」と並んでいます。
最初に紹介した「クエリーリスト」、「レプリケーションステータス」以外にもいろいろ便利なモードがあります!



接続するDBの指定は『コマンドで明示的に指定する方法』と『設定ファイルを用いる方法』があります。

明示的に指定する方法
$ innotop -u<dbuser> -p<dbpass> -h<server>

PROCESS権限などつけたユーザでアクセスします

今回はこの方法は使いません。
(使うと設定ファイルが上書きされちゃったりもします・・・)

以下、設定ファイルを用いる方法

初回のみ、-wをつけて起動すると設定ファイルが作られます。

$ innotop -w

設定ファイルのパスは『~/.innotop/innotop.conf』です。

対話式で設定もできますが、面倒なのでいったんqで抜けて手で設定ファイルを編集します。

DB接続設定

connectionsセクションに記載します

[connections]

test01-db-m=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test01-db-m:port=3306 savepass=1 dl_table=
test01-db-s01=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test01-db-s01:port=3306 savepass=1 dl_table=
test01-db-s02=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test01-db-s02:port=3306 savepass=1 dl_table=
test01-db-s03=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test01-db-s03:port=3306 savepass=1 dl_table=
test02-db-m=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test02-db-m:port=3306 savepass=1 dl_table=
test02-db-s01=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test02-db-s01:port=3306 savepass=1 dl_table=
test02-db-s02=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test02-db-s02:port=3306 savepass=1 dl_table=
test02-db-s03=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test02-db-s03:port=3306 savepass=1 dl_table=
test02-db-s04=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test02-db-s04:port=3306 savepass=1 dl_table=
test03-db-m=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test03-db-m:port=3306 savepass=1 dl_table=
test03-db-s01=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test03-db-s01:port=3306 savepass=1 dl_table=
test03-db-s02=user=<dbuser> have_user= pass=<dbpass> have_pass= dsn=DBI:mysql:host=test03-db-s01:port=3306 savepass=1 dl_table=

[/connections]

user、pass、hostは環境に合わせて!
innotopを起動して『@』を押せば指定したDBが選択できるようになっているはずです。

サーバグループの設定

server_groupsセクションに記載します。

[server_groups]

test01-db=test01-db-m test01-db-s01 test01-db-s02 test01-db-s03
test02-db=test02-db-m test02-db-s01 test02-db-s02 test02-db-s03 test02-db-s04
test03-db=test03-db-m test03-db-s01 test03-db-s02

[/server_groups]

innotop起動後、#で指定したグループを選択できるようになります。

ちょっとしたこと

サーバ名などがうまく出なかったり、出力するフィールドを調整したい場合はactive_columnsセクションを修正します。

[active_columns]

processlist=cxn cmd cnt mysql_thread_id hostname db time info

[/active_columns]


サーバ名やDB名などが途中で切れてしまって見づらい場合は・・・とりあえずソース修正します・・・
このあたりのmaxwをいじります。

 2585    processlist => {
 2586       capt => 'MySQL Process List',
 2587       cust => {},
 2588       cols => {
 2589          cxn             => { src => 'cxn',        minw => 6,  maxw => 10 },
 2590          mysql_thread_id => { src => 'id',         minw => 6,  maxw => 0 },
 2591          user            => { src => 'user',       minw => 5,  maxw => 8 },
 2592          hostname        => { src => $exprs{Host}, minw => 13, maxw => 8, },
 2593          port            => { src => $exprs{Port}, minw => 0,  maxw => 0, },
 2594          host_and_port   => { src => 'host',       minw => 0,  maxw => 0 },
 2595          db              => { src => 'db',         minw => 6,  maxw => 12 },
 2596          cmd             => { src => 'command',    minw => 5,  maxw => 0 },
 2597          time            => { src => 'time',       minw => 5,  maxw => 0, trans => [ qw(secs_to_time) ], agg => 'sum' },
 2598          state           => { src => 'state',      minw => 0,  maxw => 0 },
 2599          info            => { src => 'info',       minw => 0,  maxw => 0, trans => [ qw(no_ctrl_char) ] },
 2600          cnt             => { src => 'id',         minw => 0,  maxw => 0 },
 2601       },


ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ



※一部のモードでエラー終了してそのまま起動できなくなったりもしますが、
そういうときはノリでソース修正するか別モードを明示的に指定して起動しましょう。

$ innotop --mode Q