我想要一個腳本顯示通過MySQL登錄到我的服務器的用戶。現在我用列出已登錄的MySQL用戶
show processlist;
,並手動打開每個BLOB的,看看哪些條目對應於服務器本身,它對應於機器人,其對應於非活躍用戶,等等。但是必須有更好的方法!
我想象一個Perl腳本,但也許有更好的方法。當然,不知道誰登錄了 - 是否有一些標準工具?
我想要一個腳本顯示通過MySQL登錄到我的服務器的用戶。現在我用列出已登錄的MySQL用戶
show processlist;
,並手動打開每個BLOB的,看看哪些條目對應於服務器本身,它對應於機器人,其對應於非活躍用戶,等等。但是必須有更好的方法!
我想象一個Perl腳本,但也許有更好的方法。當然,不知道誰登錄了 - 是否有一些標準工具?
這樣做有幫助嗎?
#!/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
與MySQL 5.1.7開始,你可以只使用INFORMATION_SCHEMA PROCESSLIST表:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
這是一個很好的答案,和+1了點。但由於我的控制之外的原因(遺留系統),我被困在5.0版本中。 – Charles 2012-04-18 19:34:55
在這種情況下,這可能有所幫助:http://2bits.com/articles/monitoring-mysql-queries-using-processlist-along-with-system-resource-utilization.html。通過調整egrep表達式中的processlist字段,你應該能夠接近你所需要的。 – BluesRockAddict 2012-04-18 19:37:40
Innotop是一個偉大的工具,甚至顯示用戶正在做的,可配置的刷新率和一堆更多的功能。它在Perl中,但已經爲你寫:)
我修改了它以適應我的需要。這非常有幫助。 – Charles 2012-04-19 17:33:11