MySQL Shell 8.4  /  MySQL Shell 程式碼執行  /  程式碼歷史記錄

5.5 程式碼歷史記錄

您在 MySQL Shell 中發出的程式碼會儲存在歷史記錄中,然後可以使用向上和向下箭頭鍵存取。您也可以使用遞增歷史記錄搜尋功能來搜尋歷史記錄。若要搜尋歷史記錄,請使用 Ctrl+R 向後搜尋,或使用 Ctrl+S 在歷史記錄中向前搜尋。一旦搜尋啟動,輸入字元會搜尋歷史記錄中任何符合這些字元的字串,並顯示第一個符合項目。使用 Ctrl+SCtrl+R 來搜尋目前搜尋詞的其他符合項目。輸入更多字元會進一步精簡搜尋。在搜尋期間,您可以按下箭頭鍵以從目前的搜尋結果繼續逐步瀏覽歷史記錄。按下 Enter 以接受顯示的符合項目。使用 Ctrl+C 來取消搜尋。

history.maxSize MySQL Shell 組態選項設定歷史記錄中要儲存的最大項目數。預設值為 1000。如果歷史記錄項目數超過設定的最大值,則會移除並捨棄最舊的項目。如果將最大值設定為 0,則不會儲存任何歷史記錄項目。

預設情況下,歷史記錄不會在工作階段之間儲存,因此當您結束 MySQL Shell 時,目前工作階段期間發出的歷史記錄會遺失。您可以啟用 MySQL Shell history.autoSave 選項,在工作階段之間儲存您的歷史記錄。例如,若要永久變更此設定,請發出

mysqlsh-js> \option --persist history.autoSave=1

啟用 history.autoSave 選項後,歷史記錄會儲存在 MySQL Shell 組態路徑中,該路徑在 Linux 和 macOS 上是 ~/.mysqlsh 目錄,在 Windows 上則是 %AppData%\MySQL\mysqlsh 資料夾。可以在所有平台上定義環境變數 MYSQLSH_USER_CONFIG_HOME 來覆寫此路徑。儲存的歷史記錄是由 MySQL Shell 自動建立,且只有擁有者使用者才能讀取。如果無法讀取或寫入歷史記錄檔案,MySQL Shell 會記錄錯誤訊息並跳過讀取或寫入作業。歷史記錄會依據作用中的語言進行分割,且檔案會命名為 history.sqlhistory.jshistory.py

發出 MySQL Shell \history 命令會依據發出的順序顯示歷史記錄項目,以及其歷史記錄項目編號,該編號可用於 \history delete entry_number 命令。您可以手動刪除個別歷史記錄項目、指定的歷史記錄項目數值範圍,或歷史記錄的尾部。您也可以使用 \history clear 手動刪除整個歷史記錄。當您結束 MySQL Shell 時,如果 history.autoSave 組態選項已設定為 true,則會儲存歷史記錄檔案中保留的歷史記錄項目,並將其編號重設為從 1 開始。如果 shell.options["history.autoSave"] 組態選項設定為 false (預設值),則會清除歷史記錄檔案。

只有您在 MySQL Shell 提示符號處互動式輸入的程式碼才會新增至歷史記錄。間接或內部執行的程式碼,例如執行 \source 命令時,不會新增至歷史記錄。當您發出多行程式碼時,會在歷史記錄項目中移除換行字元。如果多次發出相同的程式碼,則只會將其儲存在歷史記錄中一次,以減少重複。

您可以使用 --histignore 命令選項自訂新增至歷史記錄的項目。此外,在 SQL 模式中使用 MySQL Shell 時,您可以設定不應新增至歷史記錄的字串。當您使用 \sql 命令搭配查詢以在其他語言處於作用中時執行單一 SQL 陳述式時,也會套用此歷史記錄忽略清單。

預設情況下,符合 glob 模式 IDENTIFIEDPASSWORD 的字串不會新增至歷史記錄。若要設定要比對的其他字串,請使用 --histignore 命令選項或 shell.options["history.sql.ignorePattern"]。可以指定多個字串,並以冒號 (:) 分隔。歷史記錄比對使用不區分大小寫的 glob 模式比對。支援的萬用字元為 * (比對任何 0 個或多個字元) 和 ? (比對正好 1 個字元)。預設字串指定為 "*IDENTIFIED*:*PASSWORD*"

即使歷史記錄忽略清單適用於最近執行的陳述式,您仍然可以按下向上箭頭來取得該陳述式。這是為了讓您無需重新輸入所有輸入即可進行更正。如果篩選適用於上次執行的陳述式,則會在輸入另一個陳述式後,或如果您在執行陳述式後立即結束 MySQL Shell 時,將其從歷史記錄中移除。