文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  一般查詢日誌

7.4.3 一般查詢日誌

一般查詢日誌是 mysqld 正在執行的動作的一般記錄。當用戶端連線或中斷連線時,伺服器會將資訊寫入此日誌,並記錄從用戶端收到的每個 SQL 陳述式。當您懷疑用戶端中存在錯誤,並想確切知道用戶端傳送到 mysqld 的內容時,一般查詢日誌非常有用。

顯示用戶端連線的每一行還會包含 using connection_type,以指示用於建立連線的協定。connection_typeTCP/IP(在未經 SSL 的情況下建立的 TCP/IP 連線)、SSL/TLS(在經 SSL 的情況下建立的 TCP/IP 連線)、Socket(Unix Socket 檔案連線)、Named Pipe(Windows 具名管道連線)或 Shared Memory(Windows 共享記憶體連線)之一。

mysqld 會按照接收陳述式的順序將它們寫入查詢日誌,這可能與它們執行的順序不同。此記錄順序與二進位日誌的順序相反,二進位日誌會在陳述式執行後但在任何鎖定釋放之前寫入陳述式。此外,查詢日誌可能包含只選取資料的陳述式,而此類陳述式永遠不會寫入二進位日誌。

在複寫來源伺服器上使用基於陳述式的二進位記錄時,其複本收到的陳述式會寫入每個複本的查詢日誌。如果用戶端使用 mysqlbinlog 公用程式讀取事件並將它們傳遞到伺服器,則陳述式會寫入來源的查詢日誌。

但是,當使用基於列的二進位記錄時,更新會以列變更而非 SQL 陳述式的形式傳送,因此,當 binlog_formatROW 時,這些陳述式永遠不會寫入查詢日誌。當此變數設定為 MIXED 時,視所使用的陳述式而定,給定的更新也可能不會寫入查詢日誌。如需更多資訊,請參閱第 19.2.1.1 節,「基於陳述式和基於列的複寫的優點和缺點」

預設情況下,一般查詢日誌是停用的。若要明確指定初始一般查詢日誌的狀態,請使用 --general_log[={0|1}]。不帶參數或參數為 1 時,--general_log 會啟用日誌。參數為 0 時,此選項會停用日誌。若要指定日誌檔名,請使用 --general_log_file=file_name。若要指定日誌目的地,請使用 log_output 系統變數(如 第 7.4.1 節「選取一般查詢日誌和慢查詢日誌輸出目的地」所述)。

注意

如果您指定 TABLE 日誌目的地,請參閱日誌表和「開啟太多檔案」錯誤

如果未指定一般查詢日誌檔名,預設名稱為 host_name.log。除非給定絕對路徑名稱以指定不同的目錄,否則伺服器會在資料目錄中建立該檔案。

若要在執行時停用或啟用一般查詢日誌,或變更日誌檔名,請使用全域 general_loggeneral_log_file 系統變數。將 general_log 設定為 0 (或 OFF) 以停用日誌,或設定為 1 (或 ON) 以啟用日誌。設定 general_log_file 以指定日誌檔名。如果日誌檔已開啟,則會關閉該檔案並開啟新檔案。

啟用一般查詢日誌後,伺服器會將輸出寫入 log_output 系統變數指定的任何目的地。如果啟用日誌,伺服器會開啟日誌檔案並將啟動訊息寫入其中。但是,除非選取 FILE 日誌目的地,否則不會將進一步的查詢記錄到檔案中。如果目的地為 NONE,即使啟用了一般日誌,伺服器也不會寫入任何查詢。如果日誌目的地值不包含 FILE,設定日誌檔名對記錄沒有影響。

伺服器重新啟動和日誌刷新不會導致產生新的通用查詢日誌檔案(儘管刷新會關閉並重新開啟它)。若要重新命名檔案並建立新檔案,請使用下列命令

$> mv host_name.log host_name-old.log
$> mysqladmin flush-logs general
$> mv host_name-old.log backup-directory

在 Windows 上,請使用 rename 而不是 mv

您也可以在執行時透過停用日誌來重新命名一般查詢日誌檔案

SET GLOBAL general_log = 'OFF';

停用日誌後,從外部重新命名日誌檔案(例如,從命令列)。然後再次啟用日誌

SET GLOBAL general_log = 'ON';

此方法適用於任何平台,且不需要重新啟動伺服器。

若要針對目前的工作階段停用或啟用一般查詢日誌,請將工作階段 sql_log_off 變數設定為 ONOFF。(這假設一般查詢日誌本身已啟用。)

寫入一般查詢日誌的陳述式中的密碼會由伺服器重寫,使其不會以純文字形式逐字出現。可以透過使用 --log-raw 選項啟動伺服器來取消對一般查詢日誌的密碼重寫。此選項可能對於診斷目的很有用,可以查看伺服器接收到的陳述式的確切文字,但基於安全原因,不建議用於生產環境。另請參閱第 8.1.2.3 節「密碼和記錄」

密碼重寫的含義是,無法解析的陳述式(例如,由於語法錯誤)不會寫入一般查詢日誌,因為無法確定它們是否不含密碼。需要記錄所有陳述式(包括包含錯誤的陳述式)的使用案例應使用 --log-raw 選項,請注意,這也會繞過密碼重寫。

只有在預期使用純文字密碼時才會發生密碼重寫。對於具有預期使用密碼雜湊值的語法的陳述式,不會發生重寫。如果錯誤地為此類語法提供了純文字密碼,則密碼會按原樣記錄,而不會進行重寫。

log_timestamps 系統變數控制寫入一般查詢日誌檔案(以及慢查詢日誌檔案和錯誤日誌)的訊息中時間戳記的時區。它不會影響寫入日誌表的一般查詢日誌和慢查詢日誌訊息的時區,但可以透過使用 CONVERT_TZ() 或設定工作階段 time_zone 系統變數,將從這些表格中擷取的列從本機系統時區轉換為任何所需的時區。