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

标签 mysql

有没有办法只记录对特定用户或数据库的查询?我知道您可以设置通用日志,但我不想记录整个 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/

相关文章:

php js mysql下拉选择用db值填充文本框

php - MySQL 查询问题 - WHERE AND/OR

mysql 匹配字符串子集

php - 我需要通过 PHP 上的 SQL 查询显示存储在图库中的图像

java - MySQL 将组成的唯一索引截断为 64 个字符

mysql - 错误 : Integrity constraint violation: 1052 Column

mysql - 服务器上的 "mysqladmin flush-hosts"怎么办?

php - 留空时多个下拉菜单查询结果

MySQL 复杂索引

php - 根据数据库值勾选复选框