2011-04-07 64 views

回答

3

运行从一个MySQL工具下面查看所有正在运行的程序(包括睡眠连接):

SHOW PROCESSLIST 

或者,您可以查询INFORMATION_SCHEMA表以获得相同的:

select * from information_schema.processlist 

要查看所有人已登录的历史记录,可以将常规查询日志配置为转到表中,方法是将以下启动参数添加到您的mysqld启动“--log-output = TABLE --general-log”,然后你可以从general_log ta中查询这些信息在mysql模式中。以下是查询,你可以使用:

select * from mysql.general_log where command_type = 'Connect'; 

提醒一句的是,这个表可以得到巨大。你会想定期清理它。

+1

这只会显示当前正在运行的查询 - 而不是以前谁访问过数据库。 – 2011-04-07 02:44:17

+0

啊。我错过了。没有办法看到真正注销的用户,只能看到当前登录的用户(即使他们没有运行查询,他们仍会打开连接)。如果您想跟踪所有人已经登录,您可能需要创建一个cron作业,将该信息定期捕获到表中,然后您可以查询该表。 – squawknull 2011-04-07 02:46:41

+0

您也可以使用常规查询日志 - http://dev.mysql.com/doc/refman/5.1/en/query-log.html。您可以将其配置为登录到可以直接查询的表格。 – squawknull 2011-04-07 02:48:16

1

通过查看SHOW PROCESSLIST或INFORMATION_SCHEMA.PROCESSLIST,可以获得当前与数据库保持连接的用户。

该数据的历史记录是不存在的。使用其他地方建议的通用查询日志不是一个好主意,因为它根本没有扩展:一般查询日志记录了服务器看到的每一条语句,并且它的写入大大增加了LOCK_log和磁盘I/O.如果您的通用查询日志是CSV表,则无法有效查询它,如果它是MyISAM表,它将基本上序列化数据库中的所有查询(即使是查询!)。

也就是说,因为每个查询都需要被记录,甚至读取查询。为此,需要写入一般查询日志。为此,请求MyISAM日志表上的表锁。这是非常缓慢的,即使在低负载的服务器上也不会提供任何建议。

不支持通用查询日志的其他格式。

有一组变量可以定义服务器启动,从属连接和用户连接的动作。

[email protected] [kris]> show global variables like 'init%'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| init_connect |  | 
| init_file  |  | 
| init_slave |  | 
+---------------+-------+ 
3 rows in set (0.00 sec) 

通过init_connect设置到注销当前用户,当前时间,你可以生成你想要在日志中更可扩展的方式连接ID的INSERT语句。使用带有auto_increment id的InnoDB表格。

请注意,出于安全原因,init_connect未针对root用户(SUPER_PRIV)的登录进行处理。这些将会逃避你的记录。

在MySQL 5.5中,Audit API已添加到服务器。我相信你真正想要的是一个审计插件。详情请参阅http://dev.mysql.com/doc/refman/5.5/en/writing-audit-plugins.html