3

我想要一个脚本来显示通过 MySQL 登录到我的服务器的用户。现在我用

show processlist;

并手动打开每个 BLOB 以查看哪些条目对应于服务器本身,哪些对应于机器人,哪些对应于非活动用户,等等。但是必须有更好的方法!

我在想象一个 Perl 脚本,但也许有更好的方法。当然,想知道谁登录并不少见——有一些标准工具吗?

4

3 回答 3

12

从 MySQL 5.1.7 开始,您可以只使用INFORMATION_SCHEMA PROCESSLIST表:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
于 2012-04-18T19:31:14.007 回答
2

这样的事情有帮助吗?

#!/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
于 2012-04-19T14:33:57.543 回答
1

Innotop 是一个很好的工具,它甚至可以显示用户正在做什么,具有可配置的刷新率和更多功能。它在 perl 中,但已经为你编写了 :)

于 2012-04-19T05:02:52.577 回答