如果啟用了一般查詢日誌和慢查詢日誌,MySQL 伺服器可以靈活控制寫入這些日誌的輸出目的地。日誌條目的可能目的地是日誌檔案或 mysql
系統資料庫中的 general_log
和 slow_log
表格。可以選擇檔案輸出、表格輸出或兩者。
log_output
系統變數指定日誌輸出的目的地。設定此變數本身並不會啟用日誌;它們必須單獨啟用。
如果未在啟動時指定
log_output
,則預設的日誌記錄目的地是FILE
。如果啟動時指定了
log_output
,則其值是從TABLE
(記錄到表格)、FILE
(記錄到檔案)或NONE
(不記錄到表格或檔案)中選擇的一個或多個以逗號分隔的單字。NONE
(如果存在)優先於任何其他指定符。
general_log
系統變數控制對所選日誌目的地的一般查詢日誌的記錄。如果在伺服器啟動時指定,general_log
可以選擇性地使用 1 或 0 的引數來啟用或停用日誌。若要指定檔案記錄的預設值以外的檔案名稱,請設定 general_log_file
變數。同樣地,slow_query_log
變數控制對所選目的地的慢查詢日誌的記錄,而設定 slow_query_log_file
會指定檔案記錄的檔案名稱。如果啟用任一日誌,伺服器會開啟對應的日誌檔案,並將啟動訊息寫入其中。但是,除非選擇了 FILE
日誌目的地,否則不會將查詢進一步記錄到檔案。
範例
若要將一般查詢日誌條目寫入日誌表格和日誌檔案,請使用
--log_output=TABLE,FILE
以選取兩個日誌目的地,並使用--general_log
來啟用一般查詢日誌。若要僅將一般和慢查詢日誌條目寫入日誌表格,請使用
--log_output=TABLE
以選取表格作為日誌目的地,並使用--general_log
和--slow_query_log
來啟用這兩個日誌。若要僅將慢查詢日誌條目寫入日誌檔案,請使用
--log_output=FILE
以選取檔案作為日誌目的地,並使用--slow_query_log
來啟用慢查詢日誌。在這種情況下,由於預設日誌目的地是FILE
,您可以省略log_output
設定。
與日誌表格和檔案相關聯的系統變數可讓您在執行階段控制記錄
log_output
變數表示目前的日誌記錄目的地。可以在執行階段修改它以變更目的地。general_log
和slow_query_log
變數表示是否已啟用 (ON
) 或停用 (OFF
) 一般查詢日誌和慢查詢日誌。您可以在執行階段設定這些變數來控制是否啟用日誌。
使用表格進行日誌輸出具有下列優點
日誌項目具有標準格式。若要顯示日誌表格的目前結構,請使用這些陳述式
SHOW CREATE TABLE mysql.general_log; SHOW CREATE TABLE mysql.slow_log;
日誌內容可透過 SQL 陳述式存取。這讓您能夠使用僅選取符合特定條件的日誌項目的查詢。例如,若要選取與特定用戶端相關的日誌內容(這對於識別來自該用戶端的有問題查詢很有用),使用日誌表格比使用日誌檔案更容易做到。
日誌可以透過任何連線到伺服器並發出查詢的用戶端進行遠端存取(如果該用戶端具有適當的日誌表格權限)。不必登入伺服器主機並直接存取檔案系統。
日誌表格實作具有下列特性
一般而言,日誌表格的主要目的是為使用者提供一個介面,以觀察伺服器的執行階段執行情況,而不是干擾其執行階段執行。
CREATE TABLE
、ALTER TABLE
和DROP TABLE
是日誌表格上的有效操作。對於ALTER TABLE
和DROP TABLE
,日誌表格不得在使用中,且必須停用,如稍後所述。依預設,日誌表格使用
CSV
儲存引擎,該引擎以逗號分隔值格式寫入資料。對於有權存取包含日誌表格資料的.CSV
檔案的使用者,這些檔案很容易匯入其他程式(例如可以處理 CSV 輸入的試算表)。日誌表格可以變更為使用
MyISAM
儲存引擎。您不能使用ALTER TABLE
來變更正在使用的日誌表格。必須先停用日誌。除了CSV
或MyISAM
之外,沒有其他引擎可用於日誌表格。若要停用日誌記錄,以便您可以變更(或捨棄)日誌表格,您可以使用下列策略。此範例使用一般查詢日誌;慢查詢日誌的程序類似,但使用
slow_log
表格和slow_query_log
系統變數。SET @old_log_state = @@GLOBAL.general_log; SET GLOBAL general_log = 'OFF'; ALTER TABLE mysql.general_log ENGINE = MyISAM; SET GLOBAL general_log = @old_log_state;
TRUNCATE TABLE
是日誌表格上的有效操作。它可以用來使日誌項目過期。RENAME TABLE
是日誌表格上的有效操作。您可以使用下列策略,以原子方式重新命名日誌表格(例如,執行日誌輪替)USE mysql; DROP TABLE IF EXISTS general_log2; CREATE TABLE general_log2 LIKE general_log; RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
CHECK TABLE
是日誌表格上的有效操作。LOCK TABLES
無法用於日誌表格。FLUSH TABLES WITH READ LOCK
和read_only
系統變數的狀態對日誌表格沒有影響。伺服器始終可以寫入日誌表格。寫入日誌表格的項目不會寫入二進位日誌,因此不會複寫到複本。
若要清除日誌表格或日誌檔案,請分別使用
FLUSH TABLES
或FLUSH LOGS
。不允許分割日誌表格。
mysqldump 傾印包括重新建立這些表格的陳述式,以便在重新載入傾印檔案後它們不會遺失。日誌表格內容不會被傾印。