2014-05-08 18 views
7

根據MySQL Performance Blog,昨天(5月6日)宣佈的新Percona服務器都包含MySQL Audit Plugin的開源版本。在觸發級聯運行的單個查詢期間,哪些表受到影響

我想要完成的任務是:在單個更新查詢運行期間記錄受級聯觸發器執行影響的表。例如,當執行UPDATE MY_TABLE …時,觸發器{BEFORE,AFTER}_UPDATE可能更新其他表,其上可能有其自己的觸發器等。

目前我使用國內的解決方案;裏面所有觸發我把水木清華這樣的:

IF (
     SELECT count(*) 
     FROM `information_schema`.`ROUTINES` 
     WHERE specific_name = 'my_own_log' 
      AND routine_schema = 'my_schema' 
) > 0 THEN 
    CALL my_own_log ('FOO_TRIGGER', 'Hi, I’m to update MY_TABLE') ; 
END IF ; 

在生產中我沒有定義的my_own_log程序和自information_schema表精心優化,我不產生任何性能損失。

的問題是,如果我能切換到企業解決方案(上述audit插件)以收穫約哪些表受到影響通過級聯觸發器執行的信息。 JFYI:我發現的唯一類似問題here沒有提供適用答案。

感謝您的任何建議。

回答

1

插件審計的設計與服務器進行註冊之外的互動,被用來追蹤入侵和其他相關活動,服務器與自身沒有互動(如觸發器和過程)。

這些內部活動不會根據設計對任何審計插件生成操作。從開發博客:每當審計事件發生時,當它完成了從客戶端接收的SQL語句的執行,如


http://dev.mysql.com/doc/refman/5.6/en/audit-log-plugin-logging-control.html

MySQL服務器調用審計日誌插件寫的元素。通常,服務器啓動後寫入的第一個元素具有服務器描述和啓動選項。接下來的元素代表事件,例如客戶端連接和斷開事件,執行的SQL語句等等。 只記錄頂級語句,而不是存儲程序(如觸發器或存儲過程)中的語句。由諸如LOAD DATA INFILE之類的語句引用的文件的內容不會被記錄。


現在,您最好使用自己開發的解決方案。您可以嘗試改善其性能,以便在生產環境中打開它。

+0

也許這些輪子還沒有發明。您的要求非常不尋常。 你看,因爲觸發器,FKS已經在那裏,你應該能夠在執行前告訴任何查詢的動作,只是靜態分析,除非你使用某種行動的概率途徑來定義你的成果。 所以這是非常不尋常的事先不知道你的DML語句將採取行動。 – kurast

相關問題