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_USERMySQL 使用者名稱(使用
--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;'