以下、DBマガジン2010年7月号の草稿から
ステータス情報をCSV形式で収集する
mysqladminコマンドの結果をcsv形式で保存するperlスクリプトstatus2csv.plを示す。 変数$fileに結果を保存するファイル名を指定すればすぐに使うことができる。
$cat /usr/local/bin/status2csv.pl #!/usr/bin/perl -w use strict; my $file = '/tmp/status.csv'; # 記録するファイル名を記述する my $datetime = `/bin/date`; chop($datetime); my $init = "false"; my $c = 0; my($i, @val); $init = "true" if (! -e $file); open(FILE, ">>$file") || die "Error: Can't open $file"; print FILE "datetime," if ($init eq "true"); while(<>) { if ($_ !~ /^\+/ && $_ !~ /^\-/ && $_ !~ /^\| Variable_name/) { my @row = split(" ", $_); $val[$c++] = $row[3]; print FILE $row[1] . "," if ($init eq "true"); } } print FILE "\n" if ($init eq "true"); print FILE $datetime . ","; for ($i = 0; $i < $c; $i++) { print FILE $val[$i]; print FILE "," if($i < $c-1); } print FILE "\n"; close(FILE);
使い方は簡単で次のとおりである。これで結果が'/tmp/status.csv'に保存される。
$ mysqladmin -u root -p password extended-status | /usr/local/bin/status2csv.pl
定期的なステータス情報収集
定期的にステータス情報を記録するには、crontabに次のような記述を行えばよい。 この例では毎晩0時にステータス情報を保存する。
0 0 * * * /usr/local/mysql/bin/mysqladmin -u root -p password extended-status | /usr/local/bin/status2csv.pl
収集結果の解析スクリプト
保存したステータス情報を解析する簡易スクリプトshowstatus.plを示す。 出力モードは最低限の機能のみ。
$ cat /usr/local/bin/showstatus.pl #!/usr/bin/perl -w use strict; use Getopt::Std; my(%opts, @row, @len, @val, $keywd, $i, $j); my $c = 0; getopts("dk:", \%opts); $keywd = $opts{k} if (defined $opts{k}) || die "\"Usage: showstatus.pl [-d] -k keyword < status.csv\""; while(<>) { chop; @row = split(",", $_); for ($i = 0; $i <= $#row; $i++) { $val[$c][$i] = $row[$i] if ($c != 0 || $i == 0 || defined $val[0][$i] || $row[$i] =~ /^$keywd/i); $len[$i] = length($row[$i]) if (!defined $len[$i] || ($len[$i] < length($row[$i]))); } $c++; } for ($i = 0; $i < $c; $i++) { for ($j = 0; $j <= $#row; $j++) { if (defined $val[0][$j]) { my $tmpval = $val[$i][$j]; $tmpval -= $val[$i-1][$j] if (defined $opts{d} && $val[$i][$j] =~ /^[0-9]+$/ && $i != 1); my $s = $len[$j] - length($tmpval) + 3; while($s-- > 0) {print " ";}; print $tmpval; } } print "\n"; }
使い方は次のとおりである。
- kオプションに表示したいステータス情報名を設定し、標準入力からステータス情報を保存したファイルを読み込む。 前方一致検索するので、完全なステータス情報名を指定する必要はない。
$ /usr/local/bin/showstatus.pl -k key_reads < /home/mysql/status.csv datetime Key_reads Sun Apr 11 0:00:01 JST 2010 12321148 Mon Apr 12 0:00:01 JST 2010 12753271 TUE Apr 13 0:00:00 JST 2010 13018683
- dオプションを設定すれば差分情報を表示する。
$ /usr/local/bin/showstatus.pl -d -k key_reads < /home/mysql/status.csv datetime Key_reads Sun Apr 11 0:00:01 JST 2010 12321148 Mon Apr 12 0:00:01 JST 2010 432123 TUE Apr 13 0:00:00 JST 2010 265412