2013-12-13 40 views
1

有沒有辦法只記錄某個用戶或數據庫的查詢?我知道你可以設置通用日誌,但我不想在整個MySQL實例中記錄所有查詢。相反,我只想記錄針對特定數據庫的查詢。針對特定數據庫或用戶的mysql通用查詢日誌?

SET GLOBAL general_log = 'ON'; 

是否有可以設置非全局參數?

+0

在MySQL中沒有辦法做到這一點,但是您可以爲特定數據庫grep通用日誌文件。如果您要使用'pt-query-digest',則可以篩選所選數據庫的查詢。 – ravnur

+0

哦,很酷,如果你把它作爲答案我會接受它 – keeg

回答

1

在MySQL中沒有辦法做到這一點,但是您可以爲特定數據庫grep通用日誌文件。如果您打算使用pt-query-digest,則還可以篩選所選數據庫的查詢。

+0

你可以發佈有關如何做的細節嗎?我無法在鏈接中找到它 – hectorh30

2

我使用表日誌記錄和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,表名等