文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  選擇一般查詢日誌和慢查詢日誌的輸出目的地

7.4.1 選擇一般查詢日誌和慢查詢日誌的輸出目的地

如果啟用了一般查詢日誌和慢查詢日誌,MySQL 伺服器可以靈活控制寫入這些日誌的輸出目的地。日誌條目的可能目的地是日誌檔案或 mysql 系統資料庫中的 general_logslow_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_logslow_query_log 變數表示是否已啟用 (ON) 或停用 (OFF) 一般查詢日誌和慢查詢日誌。您可以在執行階段設定這些變數來控制是否啟用日誌。

日誌表格的優點和特性

使用表格進行日誌輸出具有下列優點

  • 日誌項目具有標準格式。若要顯示日誌表格的目前結構,請使用這些陳述式

    SHOW CREATE TABLE mysql.general_log;
    SHOW CREATE TABLE mysql.slow_log;
  • 日誌內容可透過 SQL 陳述式存取。這讓您能夠使用僅選取符合特定條件的日誌項目的查詢。例如,若要選取與特定用戶端相關的日誌內容(這對於識別來自該用戶端的有問題查詢很有用),使用日誌表格比使用日誌檔案更容易做到。

  • 日誌可以透過任何連線到伺服器並發出查詢的用戶端進行遠端存取(如果該用戶端具有適當的日誌表格權限)。不必登入伺服器主機並直接存取檔案系統。

日誌表格實作具有下列特性

  • 一般而言,日誌表格的主要目的是為使用者提供一個介面,以觀察伺服器的執行階段執行情況,而不是干擾其執行階段執行。

  • CREATE TABLEALTER TABLEDROP TABLE 是日誌表格上的有效操作。對於 ALTER TABLEDROP TABLE,日誌表格不得在使用中,且必須停用,如稍後所述。

  • 依預設,日誌表格使用 CSV 儲存引擎,該引擎以逗號分隔值格式寫入資料。對於有權存取包含日誌表格資料的 .CSV 檔案的使用者,這些檔案很容易匯入其他程式(例如可以處理 CSV 輸入的試算表)。

    日誌表格可以變更為使用 MyISAM 儲存引擎。您不能使用 ALTER TABLE 來變更正在使用的日誌表格。必須先停用日誌。除了 CSVMyISAM 之外,沒有其他引擎可用於日誌表格。

    日誌表格和 開啟過多檔案錯誤。

  • 若要停用日誌記錄,以便您可以變更(或捨棄)日誌表格,您可以使用下列策略。此範例使用一般查詢日誌;慢查詢日誌的程序類似,但使用 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 無法用於日誌表格。

  • INSERTDELETEUPDATE 無法用於日誌表格。這些操作僅允許在伺服器內部進行。

  • FLUSH TABLES WITH READ LOCKread_only 系統變數的狀態對日誌表格沒有影響。伺服器始終可以寫入日誌表格。

  • 寫入日誌表格的項目不會寫入二進位日誌,因此不會複寫到複本。

  • 若要清除日誌表格或日誌檔案,請分別使用 FLUSH TABLESFLUSH LOGS

  • 不允許分割日誌表格。

  • mysqldump 傾印包括重新建立這些表格的陳述式,以便在重新載入傾印檔案後它們不會遺失。日誌表格內容不會被傾印。