I have a perl script that is running every 5 minutes to see if the mysql server
has a locked query, once it does, it sends me an email with thread_connected
and the query. I was curious, how could I write into the script to send me the
information one time instead of every 5 minutes after it does find a lock?
Below is a part where it looks for the threads, then send email:
# Thread connections
my $username = $np->opts->user;
my $password = $np->opts->password;
my $hostname = $np->opts->hostname;
my $contact = $np->opts->contactemail;
my $sendernot = $np->opts->senderemail;
my $locked = $query_hr->{Info};
my $cmdline = "/usr/bin/mysql -h $hostname -P 3306 -u $username
-p$password";
my $query_output = `/bin/echo "SHOW GLOBAL STATUS LIKE
'Threads_connected';" \| $cmdline 2>/dev/null \| /bin/grep "Threads_connected"`;
unless ($query_output =~ /^Threads_connected\s+(\d+)\s+$/) {
print "Unknown: Unable to read output from MySQL\n";
}
# Send Email
my $msg = MIME::Lite->new(
From => $sendernot,
To => $contact,
Subject => 'MySQL MyISAM lock, additional information',
Encoding => 'base64',
Data => qq{
Number of $query_output
Query causing lock: $locked
}
);
$msg->send;