2012-04-18 13 views
1

MySQL経由で自分のサーバーにログインしているユーザーを示すスクリプトを用意したいと思います。今、私はログインしているMySQLユーザーのリスト

show processlist; 

を使用して、手動など、非アクティブのユーザーに対応しており、ロボット、対応サーバー自体に対応するエントリを参照してブロブのそれぞれを開きます。しかし、よりよい方法が必要です!

私はPerlスクリプトを想像していましたが、おそらくもっと良い方法があります。確かに誰がログインしているのか不思議ではありません - 標準的なツールがありますか? MySQLのを皮切り

答えて

1

このようなことがありますか?

#!/usr/bin/perl 

use strict; 
use warnings; 
use DBI; 

my $user = "root"; 
my $pass = "password"; 
my $db = "information_schema"; 

my $dbh = DBI->connect("DBI:mysql:$db", $user, $pass) 
     or die "Connection error: $DBI::errstr\n"; 
my $sql = "show processlist"; 


my $sth = $dbh->prepare($sql); 
$sth->execute() or die "SQL error: $DBI::errstr\n"; 

my %user; 

while (my @row = $sth->fetchrow_array()) { 
     $user{$row[1]}++; 
} 

print "MySQL - Logged in users\n"; 
print "=" x 15, "\n"; 

for my $x (keys %user) { 
     print "$x - $user{$x} connections\n"; 
} 

結果:

MySQL - Logged in users 
=============== 
ndoutils - 6 connections 
root - 1 connections 
nagiosql - 5 connections 
+0

私のニーズに合わせて修正しました。これは非常に役に立ちました。 – Charles

9

はあなただけINFORMATION_SCHEMA PROCESSLISTテーブルを使用することができます5.1.7:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
+0

これは良い答えであり、そのために1。しかし、私は私のコントロール(レガシーシステム)外の理由で5.0に固執しています。 – Charles

+1

この場合、これは役立つかもしれません:http://2bits.com/articles/monitoring-mysql-queries-using-processlist-along-with-system-resource-utilization.html。 egrep式のprocesslistフィールドを調整することで、必要なものに近づけることができます。 – BluesRockAddict

1

Innotopは、そのための素晴らしいツールでありさえ、ユーザが設定可能なリフレッシュレートとさらにたくさんの機能が、やっていることを示します。 perlで書かれていますが、すでにあなたのために書かれています:)

関連する問題