mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-01 18:25:59 +00:00
45 lines
1.3 KiB
Perl
Executable File
45 lines
1.3 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
# This script helps test that tools reconnect to MySQL. Its meant to be ran
|
|
# in the background like system(qq($trunk/util/kill-mysql-process DB)) where
|
|
# DB is the name of special "tracer" database used to isolate the test in
|
|
# the process list. So, do something like CREATE DATABASE pt_kill_test, then
|
|
# run the test with D=pt_kill_test (presuming pt_kill_test is unique to
|
|
# the test). This script will then kill any and all processes that are using
|
|
# the pt_kill_test db.
|
|
#
|
|
# Exits 0 if the tracer db is observed and procs are killed, else exits 1.
|
|
|
|
use strict;
|
|
use warnings FATAL => 'all';
|
|
use Time::HiRes qw(sleep time);
|
|
|
|
if ( !@ARGV || @ARGV < 1 || @ARGV > 3 ) {
|
|
print STDERR "Usage: kill-mysql-process OPTION=VALUE\n";
|
|
print STDERR "Options: db, wait, runtime, interval\n";
|
|
exit 1;
|
|
}
|
|
|
|
my %opt = map { my ($op, $val) = split '=', $_; $op => $val; } @ARGV;
|
|
|
|
$opt{db} ||= 'tracer_db';
|
|
$opt{runtime} ||= 5.0;
|
|
$opt{interval} ||= 0.2;
|
|
|
|
sleep $opt{wait} if $opt{wait};
|
|
|
|
my $t_start = time;
|
|
while ( time - $t_start < $opt{runtime} ) {
|
|
my $procs = `/tmp/12345/use -ss -e "show processlist" | grep $opt{db} | cut -f1`;
|
|
if ( $procs && $procs =~ /\d/ ) {
|
|
foreach my $proc ( split "\n", $procs ) {
|
|
chomp $proc;
|
|
`/tmp/12345/use -e "KILL $proc"`;
|
|
}
|
|
exit 0;
|
|
}
|
|
sleep $opt{interval};
|
|
}
|
|
|
|
exit 1;
|