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


6.5.1.3 mysql 客戶端日誌

mysql 客戶端可以對以互動方式執行的陳述式執行以下類型的日誌記錄

  • 在 Unix 上,mysql 會將陳述式寫入歷史記錄檔。依預設,此檔案在您的主目錄中命名為 .mysql_history。若要指定不同的檔案,請設定 MYSQL_HISTFILE 環境變數的值。

  • 在所有平台上,如果指定了 --syslog 選項,mysql 會將陳述式寫入系統日誌設施。在 Unix 上,這是 syslog;在 Windows 上,則是 Windows 事件記錄檔。記錄訊息出現的目的地是系統相依的。在 Linux 上,目的地通常是 /var/log/messages 檔案。

以下討論描述適用於所有日誌記錄類型的特性,並提供特定於每個日誌記錄類型的資訊。

日誌記錄的運作方式

對於每個啟用的日誌記錄目的地,陳述式日誌記錄會以下列方式發生

  • 只有在以互動方式執行時才會記錄陳述式。陳述式是非互動式的,例如,當從檔案或管道讀取時。也可以使用 --batch--execute 選項來抑制陳述式日誌記錄。

  • 如果陳述式符合 忽略清單中的任何模式,則會忽略這些陳述式,且不會記錄。此清單稍後說明。

  • mysql 會個別記錄每個非忽略的、非空的陳述式行。

  • 如果非忽略的陳述式跨越多行 (不包括終止分隔符號),mysql 會串連這些行以形成完整的陳述式,將換行符號對應到空格,並記錄結果,再加上分隔符號。

因此,跨越多行的輸入陳述式可能會被記錄兩次。考量此輸入

mysql> SELECT
    -> 'Today is'
    -> ,
    -> CURDATE()
    -> ;

在此情況下,mysql 會在讀取時記錄 SELECT'Today is',CURDATE(); 行。它也會記錄完整的陳述式,在將 SELECT\n'Today is'\n,\nCURDATE() 對應到 SELECT 'Today is' , CURDATE() 後,再加上分隔符號。因此,這些行會出現在記錄的輸出中

SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();

mysql 會基於記錄目的而忽略符合 忽略清單中任何模式的陳述式。依預設,模式清單為 "*IDENTIFIED*:*PASSWORD*",以忽略參照密碼的陳述式。模式比對不區分大小寫。在模式內,有兩個字元是特殊的

  • ? 符合任何單一字元。

  • * 符合任何零個或多個字元的序列。

若要指定其他模式,請使用 --histignore 選項或設定 MYSQL_HISTIGNORE 環境變數。(如果兩者都指定,則選項值優先。) 此值應為一個或多個以冒號分隔的模式清單,這些模式會附加到預設模式清單中。

在命令列上指定的模式可能需要加上引號或逸脫,以防止您的命令解譯器將它們視為特殊。例如,若要除了參照密碼的陳述式外,也抑制記錄 UPDATEDELETE 陳述式,請像這樣調用 mysql

mysql --histignore="*UPDATE*:*DELETE*"
控制歷史記錄檔

應該使用限制性存取模式來保護 .mysql_history 檔案,因為可能會將敏感資訊寫入其中,例如包含密碼的 SQL 陳述式文字。請參閱第 8.1.2.1 節,「終端使用者密碼安全指南」。當使用 上箭頭 鍵來回溯歷史記錄時,可以從 mysql 客戶端存取檔案中的陳述式。請參閱停用互動式歷史記錄

如果您不想要維護歷史記錄檔,請先移除 .mysql_history (如果它存在)。然後使用下列任一技巧來防止它再次建立

  • MYSQL_HISTFILE 環境變數設定為 /dev/null。為了使此設定在您每次登入時都生效,請將其放入您 shell 的啟動檔案之一中。

  • 建立一個 .mysql_history 作為指向 /dev/null 的符號連結;此操作只需執行一次。

    ln -s /dev/null $HOME/.mysql_history
syslog 記錄特性

如果指定了 --syslog 選項,mysql 會將互動式陳述式寫入系統記錄設備。訊息記錄具有以下特性。

記錄發生在 資訊 層級。這對應於 Unix/Linux 上 syslog 功能的 LOG_INFO 優先順序,以及 Windows 事件記錄的 EVENTLOG_INFORMATION_TYPE。請查閱您的系統文件以了解您的記錄功能的配置。

訊息大小限制為 1024 位元組。

訊息由識別符 MysqlClient 以及以下值組成:

  • SYSTEM_USER

    作業系統使用者名稱(登入名稱),如果使用者未知則為 --

  • MYSQL_USER

    MySQL 使用者名稱(使用 --user 選項指定),如果使用者未知則為 --

  • CONNECTION_ID:

    客戶端連線識別符。這與工作階段內的 CONNECTION_ID() 函式值相同。

  • DB_SERVER

    伺服器主機,如果主機未知則為 --

  • DB

    預設資料庫,如果未選擇資料庫則為 --

  • QUERY

    已記錄的陳述式文字。

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

Mar  7 12:39:25 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
Mar  7 12:39:28 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'