| App-MadEye documentation | Contained in the App-MadEye distribution. |
App::MadEye::Plugin::Agent::MySQLSlave - monitoring mysql slave.
type: map
mapping:
target:
type: seq
required: yes
sequence:
- type: str
user:
required: yes
type: str
password:
required: yes
type: any
threshold:
required: yes
type: int
Tokuhiro Matsuno
| App-MadEye documentation | Contained in the App-MadEye distribution. |
package App::MadEye::Plugin::Agent::MySQLSlave; use strict; use warnings; use App::MadEye::Plugin::Agent::Base; use DBI; sub is_dead { my ($self, $dsn) = @_; App::MadEye->context->log('debug' => "watching $dsn"); my $user = $self->config->{config}->{user} or die "missing user"; my $password = $self->config->{config}->{password}; my $threshold = $self->config->{config}->{threshold} or die "missing threshold"; my $dbh; eval { $dbh = DBI->connect( $dsn, $user, $password, { RaiseError => 1, AutoCommit => 1 } ) or return 'cannot connect'; }; if ($@) { return $@; } my $sth = $dbh->prepare(q{SHOW SLAVE STATUS;}); $sth->execute() or return 'DBI error: ' . $dbh->errstr; if (my $row = $sth->fetchrow_hashref) { # see. http://dev.mysql.com/doc/refman/4.1/ja/show-slave-status.html if (my $le = $row->{'Last_Error'}) { return "replication error : $le\n"; } if ( $row->{'Slave_IO_Running'} ne 'Yes' ) { return "Slave IO Not Running\n"; } if ( $row->{'Slave_SQL_Running'} ne 'Yes' ) { return "Slave SQL Not Running\n"; } my $rmlp = $row->{'Read_Master_Log_Pos'}; my $emlp = $row->{'Exec_Master_Log_Pos'}; if ( abs($rmlp - $emlp) > $threshold ) { return "considerable delay : $rmlp $emlp\n"; } return; # alive! } else { return "this is not a slave!"; } } 1; __END__