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
環境變數。(如果兩者都指定,則選項值優先。) 此值應為一個或多個以冒號分隔的模式清單,這些模式會附加到預設模式清單中。
在命令列上指定的模式可能需要加上引號或逸脫,以防止您的命令解譯器將它們視為特殊。例如,若要除了參照密碼的陳述式外,也抑制記錄 UPDATE
和 DELETE
陳述式,請像這樣調用 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;'