MySQL Shell 9.0  /  MySQL Shell 日誌記錄和除錯  /  用戶 SQL 語句的系統日誌記錄

12.3 用戶 SQL 語句的系統日誌記錄

您在 MySQL Shell 的 SQL 模式中發出的 SQL 語句,可以傳送到作業系統的系統日誌功能。在 Unix 上,這是 syslog;在 Windows 上,則是 Windows 事件日誌。記錄訊息的顯示位置取決於系統。在 Linux 上,目的地通常是 /var/log/messages 檔案。

當您啟用 SQL 語句的系統日誌記錄時,以下項目會寫入系統日誌功能

  • 您在 MySQL Shell 的 SQL 模式中以互動方式發出的 SQL 語句。

  • 當您處於 MySQL Shell 的 JavaScript 或 Python 模式時,透過在 \sql 命令後立即輸入而執行的單一 SQL 語句。

  • 您在 MySQL Shell 的 SQL 模式中以互動方式發出的 \source 命令實例。

以下項目會被排除,且不會寫入系統日誌功能

  • 您使用 \source 命令執行的指令檔內容。只有 \source 命令本身會寫入系統日誌功能。

  • MySQL Shell 在 AdminAPI 作業過程中自行執行的 SQL 語句。您可以將這些記錄到 MySQL Shell 應用程式日誌檔案中,如第 12.4 節,「MySQL Shell SQL 日誌記錄」中所述。

  • 根據 history.sql.ignorePattern MySQL Shell 設定選項或 --histignore 命令列選項(僅為目前會話設定 history.sql.ignorePattern 的值)指定的,會從 MySQL Shell 程式碼歷程記錄中排除的 SQL 語句。

若要將您在 MySQL Shell 的 SQL 模式中發出的 SQL 語句傳送到作業系統的系統日誌功能,請選擇以下其中一個選項

SQL 語句的系統日誌記錄只會在 MySQL Shell 以互動模式啟動時發生,因此無論是正常啟動還是使用 --interactive 選項啟動都會觸發。如果啟動時使用 --execute--file 選項以批次模式執行 mysqlsh 來處理命令或檔案,則不會發生。

日誌訊息格式

SQL 語句的日誌訊息格式為一系列以空格字元分隔的索引鍵值組。索引鍵值組如下所示

SYSTEM_USER =

作業系統使用者的登入名稱,如果使用者名稱不明,則為 --

MYSQL_USER =

MySQL 使用者的名稱,如果使用者名稱不明,則為 --

CONNECTION_ID =

MySQL Shell 連接的識別碼。

DB_SERVER =

伺服器的主機名稱,如果主機名稱不明,則為 --

DB =

預設資料庫,如果未選取任何資料庫,則為 --

QUERY =

記錄的 SQL 語句文字。

如果日誌訊息超過 1024 個位元組,則會截斷至 1024 個位元組。

以下是在 Linux 上使用 --syslog 產生之輸出的範例。此輸出格式化為易於閱讀;每個記錄的訊息實際上都佔一行。

Mar  1 17:35:33 myhost mysqlsh[33060]: 
SYSTEM_USER=hanna_j MYSQL_USER=hanna 
CONNECTION_ID=14 DB_SERVER=localhost DB='--' 
QUERY='create table test.test (c int, my_row_id BIGINT AUTO_INCREMENT INVISIBLE PRIMARY KEY);'