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 會忽略符合 「ignore」 清單中任何模式的陳述式。依預設,模式清單為 "*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
記錄的語句文字。
以下是在 Linux 上使用 --syslog
產生的範例輸出。此輸出已格式化以便於閱讀;每個記錄的訊息實際上佔用一行。
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;'