#! /usr/bin/perl # anders@fupp.net 2008-04-06 # Check if MySQL tables are within Max_data_length use Getopt::Std; use DBI; use POSIX qw(strftime); getopts('w:c:'); die("Usage: -w -c ") unless ($opt_w && $opt_c); $|=1; $user='root'; $pass='XXXXXX'; $host='localhost'; $port='3306'; $warntext = ""; $crittext = ""; @baser = (); my $dbh = DBI->connect("DBI:mysql:database=$opt_d:host=$host:port=$port",$user,$pass,{PrintError=>0}); my $dbq = $dbh->prepare("show databases;"); $dbq->execute; while($row = $dbq->fetchrow_hashref()) { push(@baser, $row->{Database}); } $dbq->finish; foreach $base (@baser) { $dbq = $dbh->prepare("use $base;"); $dbq->execute; $dbq->finish; # print "Base: $base\n"; # $dbq = $dbh->prepare("show tables;"); $dbq = $dbh->prepare("show table status;"); $dbq->execute; $columns = $dbq->{NAME}; $kolonner = "@$columns"; while($row = $dbq->fetchrow_hashref()) { $tab = $row->{Name}; # print "Sjekker tabell $tab.\n"; $maxsize = int($row->{Max_data_length}); $size = int($row->{Data_length}); $mbfree = int(($maxsize-$size)/1024); $pfree = int(($maxsize-$size)/$maxsize*100); # print "DEBUG Sjekker tab=$tab maxsize=$maxsize size=$size pfree=$pfree mbfree=$mbfree\n"; if ($pfree <= $opt_c) { $crittext .= "$tab (" . $pfree ."%/" . $mbfree . "MB free) "; } elsif ($pfree <= $opt_w) { $warntext .= "$tab/$base (" . $pfree ."%/" . $mbfree . "MB free) "; } } $dbq->finish; } $dbh->disconnect; if ($crittext) { $text = $crittext . $warntext; $text =~ s@\ $@@; print "CRITCIAL, " . $text . "\n"; exit(2); } elsif ($warntext) { $text = $warntext; $text =~ s@\ $@@; print "WARNING, " . $text . "\n"; } else { print "OK, 0 tables with less than $opt_w% (warning)/$opt_c% (critical) free diskspace.\n"; exit(0); }