MySQL Shell 8.4  /  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 語句傳送到作業系統的系統日誌設施,請選擇下列其中一個選項

只有在 MySQL Shell 以互動模式啟動時(透過一般啟動或使用 --interactive 選項啟動),才會進行 SQL 語句的系統日誌。如果啟動時使用 --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);'