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 语句时使用该命令,而其他语言处于活动状态。

默认情况下,与全局模式 IDENTIFIEDPASSWORD 匹配的字符串不会添加到历史记录中。要配置要匹配的更多字符串,请使用 --histignore 命令选项或 shell.options["history.sql.ignorePattern"]。可以指定多个字符串,用冒号 (:) 分隔。历史记录匹配使用与不区分大小写的全局模式匹配类似的匹配。支持的通配符是 *(匹配任何 0 个或多个字符)和 ?(匹配正好 1 个字符)。默认字符串指定为 "*IDENTIFIED*:*PASSWORD*"

最近执行的语句始终可以通过按向上箭头键获得,即使历史记录忽略列表对其适用也是如此。这样您就可以进行更正,而无需重新键入所有输入。如果筛选器适用于最后执行的语句,则该语句将在您输入另一个语句后或在您在执行该语句后立即退出 MySQL Shell 时从历史记录中删除。