特定数据库或用户的mysql常规查询日志?

特定数据库或用户的mysql常规查询日志?,mysql,Mysql,有没有一种方法可以只记录特定用户或数据库的查询?我知道您可以设置常规日志,但我不想记录整个MySQL实例中的所有查询。相反,我只想记录针对特定数据库的查询 SET GLOBAL general_log = 'ON'; 是否有可以设置的非全局参数?在MySQL中无法设置,但您可以为特定数据库设置grep常规日志文件。如果要使用,您也可以筛选所选数据库的查询。我通过使用表日志记录和cron作业将条目从常规日志表复制到特定于数据库的日志表,然后截断常规日志表来实现这一点。因此,它确实必须记录每个查询

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

SET GLOBAL general_log = 'ON';

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

在MySQL中无法设置,但您可以为特定数据库设置grep常规日志文件。如果要使用,您也可以筛选所选数据库的查询。

我通过使用表日志记录和cron作业将条目从常规日志表复制到特定于数据库的日志表,然后截断常规日志表来实现这一点。因此,它确实必须记录每个查询,但您可以隔离数据库,并且表的大小仅与记录数据库查询所需的大小相同(加上在执行cron作业之间运行的查询数量)

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

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、表名等。

您可以使用pt查询摘要,其中数据库名是您的数据库名

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

在MySQL中没有办法做到这一点,但您可以为特定数据库grep常规日志文件。如果你打算使用
pt query digest
你也可以过滤所选数据库的查询。哦,很酷,如果你把它作为答案,我会接受它。最简单的解决方案是登录到mysql表而不是日志文件,只选择
user\u host
列与你的用户或数据库匹配的行。有关如何登录到表的信息,请参见。我知道这仍然会记录所有内容,但它使过滤变得非常容易。你能发布关于如何进行过滤的详细信息吗?我在链接中找不到它
pt-query-digest --filter '($event->{db} || "") =~ m/databasename/' /var/lib/mysql/mysql-slow.log > /var/tmp/slow-result.log