列出登录MySQL的用户

列出登录MySQL的用户,mysql,sql,Mysql,Sql,我希望有一个脚本,显示通过MySQL登录到我的服务器的用户。现在我用 show processlist; 并手动打开每个blob,查看哪些条目对应于服务器本身,哪些对应于机器人,哪些对应于非活动用户,等等。但必须有更好的办法 我在想象一个Perl脚本,但也许有更好的方法。当然,想知道谁登录了并不罕见——有没有标准工具?从MySQL 5.1.7开始,您可以使用以下表格: Innotop是一个很好的工具,它可以显示用户正在做什么,具有可配置的刷新率和一系列其他功能。它是用perl编写的,但已经为您

我希望有一个脚本,显示通过MySQL登录到我的服务器的用户。现在我用

show processlist;
并手动打开每个blob,查看哪些条目对应于服务器本身,哪些对应于机器人,哪些对应于非活动用户,等等。但必须有更好的办法


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

从MySQL 5.1.7开始,您可以使用以下表格:


Innotop是一个很好的工具,它可以显示用户正在做什么,具有可配置的刷新率和一系列其他功能。它是用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

这是一个很好的答案,因此+1。但由于我无法控制的原因(遗留系统),我一直坚持使用5.0。在这种情况下,这可能会有所帮助:。通过调整egrep表达式中的processlist字段,您应该能够接近所需的内容。我已经对其进行了修改,以满足我的需要。这很有帮助。
MySQL - Logged in users
===============
ndoutils - 6 connections
root - 1 connections
nagiosql - 5 connections