innotopはMySQLの状態を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]
ちょっとしたこと
サーバ名などがうまく出なかったり、出力するフィールドを調整したい場合は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