Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.08 KB | None | 0 0
  1. #!/usr/bin/perl
  2. # spe - 10/2006
  3.  
  4. use DBI;
  5. use MIME::Lite;
  6.  
  7. my $user = "root";
  8. my $password = "password";
  9. my $emailalertfrom = "alert@foo.com";
  10. my $emailalertto = "support@foo.com";
  11. my $mysqladmin = "/usr/bin/mysqladmin";
  12. my $sql = "SHOW FULL PROCESSLIST";
  13. my $killedAQuery = 0;
  14. my $dbhost=`/bin/hostname`;
  15.  
  16. $db_handle = dbconnect();
  17.  
  18. while (1) {
  19.     // Check if the db connection is still valid, if it isn't, connect again
  20.     while(!$db_handle->ping) $db_handle = dbconnect(); 
  21.  
  22.     $statement = $db_handle->prepare($sql)
  23.         or die "Couldn't prepare query '$sql': $DBI::errstr\n";
  24.     $statement->execute()
  25.         or die "Couldn't execute query '$sql': $DBI::errstr\n";
  26.    
  27.     while (($row_ref = $statement->fetchrow_hashref()) && ($killedAQuery == 0))
  28.     {
  29.         if ($row_ref->{Command} eq "Query") {
  30.             if ($row_ref->{Time} >= 10) {
  31.                 @args = ($mysqladmin, "-u".$user, "-p".$password, "kill", $row_ref->{Id});
  32.                 $returnCode = system(@args);
  33.                 $emailMessage = "A slow query as been detected (more than $row_ref->{Time} seconds). SQLKiller will try to kill this request.\nThe query is:\n$row_ref->{Info}\n\n";
  34.            
  35.                 if ($returnCode != 0) {
  36.                     $emailMessage .= "Result: The SQL request cannot be killed. This SQL request is probably a fake slow query due to an another SQL request. The problematic request is the first killed successfully\n";
  37.                 } else {
  38.                     $emailMessage .= "Result: The SQL request has been killed successfully\n";
  39.                 }
  40.            
  41.                 my $msg = new MIME::Lite
  42.                 From =>$emailalertfrom,
  43.                 To =>$emailalertto,
  44.                 Subject =>'[ SQLKILLER ] A query has been killed on '.$dbhost,
  45.                 Type =>'TEXT',
  46.                 Data =>$emailMessage;
  47.            
  48.                 $msg -> send;
  49.                 $killedAQuery = 1;
  50.             }
  51.         }
  52.     }
  53.    
  54.     $statement->finish();
  55.    
  56.     if ($killedAQuery == 0) {
  57.         sleep(5);
  58.     } else {
  59.         $killedAQuery = 0;
  60.         #sleep(1);
  61.     }
  62. }
  63.  
  64. //Never called
  65. //$db_handle->disconnect();
  66.  
  67. sub dbconnect() {
  68.     while (1) {
  69.         $db_handle = DBI->connect("dbi:mysql:database=mysql;host=127.0.0.1:port=3306;user=".$user.";password=".$password);
  70.         if ($db_handle == 0) sleep(1);
  71.         else return $db_handle;
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement