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 に答える