mysql一般查询日志为特定数据库或用户?

时间:2013-12-13 18:11:50

标签: mysql

有没有办法只记录某个用户或数据库的查询?我知道您可以设置常规日志,但我不想在整个MySQL实例中记录所有查询。相反,我只想针对特定数据库记录查询。

SET GLOBAL general_log = 'ON';

是否有可以设置的非GLOBAL参数?

3 个答案:

答案 0 :(得分:7)

我通过使用表日志记录和cron作业将条目从general_log表复制到我的特定于数据库的日志表,然后截断general_log表来完成此操作。因此,它必须记录每个查询,但是您可以隔离数据库,并且表只会增长到记录数据库查询所需的大小(加上在执行cron作业之间运行的查询很多)。

这是我使用的程序(对于名为db的数据库):

set global general_log = 'OFF';
alter table mysql.general_log ENGINE = MyISAM;
show create table mysql.general_log;

-- create a new table mysql.db_log using the above schema
-- i.e. just replace the table name.

set global log_output = 'TABLE';
set global general_log = 'ON';

cron工作看起来像:

mysql -e "insert into mysql.db_log select * from mysql.general_log where user_host like '%[db]%"
mysql -e "truncate mysql.general_log"

调整where子句以匹配您要保存的任何日志:数据库,用户,IP,表名等。

答案 1 :(得分:3)

在MySQL中无法做到这一点,但您可以grep特定数据库的常规日志文件。如果您打算使用pt-query-digest,您也可以过滤所选数据库的查询。

答案 2 :(得分:0)

您可以使用pt-query-digest,其中<​​strong>数据库名称是您的数据库名称

pt-query-digest --filter '($event->{db} || "") =~ m/databasename/' /var/lib/mysql/mysql-slow.log > /var/tmp/slow-result.log