有没有办法只记录对特定用户或数据库的查询?我知道您可以设置通用日志,但我不想记录整个 MySQL 实例中的所有查询。相反,我只想记录针对特定数据库的查询。
SET GLOBAL general_log = 'ON';
有没有可以设置的非GLOBAL参数?
最佳答案
我通过使用表日志记录和 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、表名等。
关于特定数据库或用户的mysql一般查询日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573199/