有没有办法只记录某个用户或数据库的查询?我知道您可以设置常规日志,但我不想在整个MySQL实例中记录所有查询。相反,我只想针对特定数据库记录查询。
SET GLOBAL general_log = 'ON';
是否有可以设置的非GLOBAL参数?
答案 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