MySQL Shell 8.4  /  使用 MySQL Shell 命令  /  MySQL Shell 命令

3.1 MySQL Shell 命令

MySQL Shell 提供了命令,使您能够修改代码编辑器的执行环境,例如配置活动编程语言或 MySQL 服务器连接。下表列出了无论当前选择的语言是什么都可用的命令。由于命令需要独立于执行模式可用,因此它们以转义序列开头,即\字符。

命令 别名/快捷方式 描述

\help

\h\?

打印有关 MySQL Shell 的帮助信息,或搜索在线帮助。

\quit

\q\exit

退出 MySQL Shell。

\

在 SQL 模式下,开始多行模式。代码在输入空行时被缓存并执行。

\status

\s

显示当前 MySQL Shell 状态。

\js

将执行模式切换到 JavaScript。

\py

将执行模式切换到 Python。

\sql

将执行模式切换到 SQL。

\connect

\c

连接到 MySQL 实例。

\reconnect

重新连接到相同的 MySQL 实例。

\disconnect

断开全局会话。

\use

\u

指定要使用的模式。

\source

\.source(无反斜杠)

使用活动语言执行脚本文件。

\warnings

\W

显示语句生成的任何警告。

\nowarnings

\w

不显示语句生成的任何警告。

\history

查看和编辑命令行历史记录。

\rehash

手动更新自动完成名称缓存。

\option

查询和更改 MySQL Shell 配置选项。

\show

使用提供的选项和参数运行指定的报告。

\watch

使用提供的选项和参数运行指定的报告,并定期刷新结果。

\edit

\e

在默认系统编辑器中打开命令,然后将其显示在 MySQL Shell 中。

\pager

\P

配置 MySQL Shell 用于显示文本的分页器。

\nopager

禁用 MySQL Shell 配置为使用的任何分页器。

\system

\!

运行指定的操作系统命令并将结果显示在 MySQL Shell 中。

\query_attributes

使您能够为 SQL 查询定义查询属性。MySQL Shell 的功能与 MySQL 客户端相同。

帮助命令

\help 命令可以带或不带参数使用。当不带参数使用时,会打印一般的帮助消息,其中包括有关可用 MySQL Shell 命令、全局对象和主要帮助类别的信息。

当带参数使用时,参数用于根据 MySQL Shell 当前运行的模式搜索可用帮助。参数可以是单词、命令、API 函数或 SQL 语句的一部分。以下类别存在

  • AdminAPI - 详细说明了 dba 全局对象和 AdminAPI,它使您能够使用 InnoDB 集群、InnoDB 集群集和 InnoDB 复制集。

  • X DevAPI - 详细说明了 mysqlx 模块以及 X DevAPI 的功能,它使您能够使用 MySQL 作为文档存储。

  • Shell 命令 - 提供有关可用内置 MySQL Shell 命令的详细信息。

  • ShellAPI - 包含有关 shellutil 全局对象的信息,以及 mysql 模块,该模块使您能够在 MySQL 服务器上执行 SQL。

  • SQL 语法 - 用于检索 SQL 语句语法帮助的入口点。

要搜索有关某个主题的帮助信息,例如 API 函数,请使用函数名称作为模式。您可以使用通配符字符 ? 来匹配任何单个字符,并使用 * 来匹配搜索中的多个字符。通配符字符可以在模式中使用一次或多次。以下命名空间也可以在搜索帮助时使用

  • dba 用于 AdminAPI

  • mysqlx 用于 X DevAPI

  • mysql 用于经典 MySQL 协议的 ShellAPI

  • shell 用于其他 ShellAPI 类:ShellSysOptions

  • commands 用于 MySQL Shell 命令

  • cmdline 用于 mysqlsh 命令界面

例如,要搜索有关某个主题的帮助信息,请发出 \help 模式 命令,并

  • 使用 x devapi 搜索有关 X DevAPI 的帮助信息

  • 使用 \c 搜索有关 MySQL Shell \connect 命令的帮助信息

  • 使用 getClusterdba.getCluster 搜索有关 AdminAPI dba.getCluster() 操作的帮助信息

  • 使用 Tablemysqlx.Table 搜索有关 X DevAPI Table 类的帮助信息

  • 当 MySQL Shell 在 JavaScript 模式下运行时,使用 isViewTable.isViewmysqlx.Table.isView 搜索有关 Table 对象的 isView 函数的帮助信息

  • 当 MySQL Shell 在 Python 模式下运行时,使用 is_viewTable.is_viewmysqlx.Table.is_view 搜索有关 Table 对象的 isView 函数的帮助信息

  • 当 MySQL Shell 在 SQL 模式下运行时,如果与 MySQL 服务器的全局会话存在,则会显示 SQL 帮助。要获取概述,请使用 sql syntax 作为搜索模式。

根据提供的搜索模式,可能会找到一个或多个结果。如果只有一个帮助主题的标题包含搜索模式,则会显示该帮助主题。如果多个主题标题与模式匹配,但有一个是完全匹配,则会显示该帮助主题,然后是标题中包含模式匹配的其他主题列表。如果未识别出完全匹配,则会显示标题中包含模式匹配的主题列表。如果返回主题列表,则可以通过再次输入命令,使用与相关主题标题匹配的扩展搜索模式,从列表中选择要查看的主题。

连接、重新连接和断开连接命令

\connect 命令用于连接到 MySQL 服务器。请参阅 第 4.3 节,“MySQL Shell 连接”

例如

\connect root@localhost:3306

如果需要密码,系统会提示您输入密码。

使用 --mysqlx (--mx) 选项使用 X 协议创建会话以连接到 MySQL 服务器实例。例如

\connect --mysqlx root@localhost:33060

使用 --mysql (--mc) 选项创建 ClassicSession,使您能够使用经典 MySQL 协议直接在服务器上发出 SQL。例如

\connect --mysql root@localhost:3306

使用 --ssh 选项创建或重新使用 SSH 隧道,该隧道提供到 MySQL 服务器实例的加密连接。不支持通过使用 SSH 隧道从 MySQL Shell 建立的连接使用 AdminAPI 命令。以 [user@]hostname[:port] 格式提供连接到 SSH 服务器的 URI,后跟 MySQL 实例 URI,例如

\connect --ssh [email protected]:2222 root@localhost:3306

当您使用 --ssh 选项时,必须在 MySQL 实例 URI 中指定连接到 MySQL 服务器实例的端口。

使用 \connect 命令建立的 SSH 隧道必须使用默认的 SSH 配置文件和身份文件。有关设置这些文件以及从 MySQL Shell 建立 SSH 隧道连接的更多信息,请参阅 第 4.3.6 节,“使用 SSH 隧道”。您可以使用 shell.connect() 方法或在命令行上设置 SSH 隧道以获取其他设置选项。建立后,来自同一用户的同一个实例的相同主机的连接之间可以共享 SSH 隧道,无论最初使用哪种设置方法。

\reconnect 命令不带任何参数或选项。如果与服务器的连接断开,您可以使用 \reconnect 命令,它会使 MySQL Shell 使用现有的连接参数尝试几次重新连接会话。如果这些尝试不成功,您可以使用 \connect 命令并指定连接参数来建立新的连接。

\disconnect 命令也不带任何参数或选项。该命令会断开 MySQL Shell 的全局会话(由 session 全局对象表示的会话)与当前连接的 MySQL 服务器实例的连接,这样您就可以关闭连接,但仍然可以继续使用 MySQL Shell。

如果与服务器的连接断开,您可以使用 \reconnect 命令,它会使 MySQL Shell 使用现有的连接参数尝试几次重新连接会话。如果这些尝试不成功,您可以使用 \connect 命令并指定连接参数来建立新的连接。

状态命令

\status 命令显示有关当前全局连接的信息。这包括有关连接的服务器、使用的字符集、正常运行时间等信息。

源命令

\source 命令或其别名 \. 可用于 MySQL Shell 的交互模式,以从给定路径的脚本文件中执行代码。例如

\source /tmp/mydata.sql

您可以执行 SQL、JavaScript 或 Python 代码。文件中的代码使用活动语言执行,因此要处理 SQL 代码,MySQL Shell 必须处于 SQL 模式。

警告

由于代码使用活动语言执行,因此使用与当前选定执行模式语言不同的语言执行脚本可能会导致意外结果。

为了与 mysql 客户端兼容,仅在 SQL 模式下,您可以使用 source 命令从脚本文件执行代码,该命令不带反斜杠并带有一个可选的 SQL 分隔符。 source 或别名 \.(不使用 SQL 分隔符)既可以在 MySQL Shell 的 SQL 交互模式中直接执行脚本,也可以在批处理模式下处理的 SQL 代码文件中使用,以从文件中执行另一个脚本。 因此,使用 SQL 模式下的 MySQL Shell,您可以使用以下三种命令之一,从交互模式或批处理模式执行 /tmp/mydata.sql 文件中的脚本

source /tmp/mydata.sql;
source /tmp/mydata.sql
\. /tmp/mydata.sql  

命令 \source /tmp/mydata.sql 也是有效的,但仅在交互模式下有效。

在交互模式下,\source\.source 命令本身会添加到 MySQL Shell 历史记录中,但执行的脚本文件的内容不会添加到历史记录中。

使用命令

使用 \use 命令,您可以选择哪个模式处于活动状态,例如

\use schema_name

使用 \use 命令需要一个活动的全局开发会话。使用 \use 命令将当前模式设置为指定的 schema_name,并将 db 变量更新为代表所选模式的对象。

历史记录命令

使用 \history 命令列出您之前在 MySQL Shell 中发出的命令。发出 \history 命令将按其发出的顺序显示历史记录条目,并附带其历史记录条目编号,该编号可与 \history delete entry_number 命令一起使用。

使用 \history 命令提供以下选项

  • 使用 \history save 手动保存历史记录。

  • 使用 \history delete entrynumber 删除具有指定编号的单个历史记录条目。

  • 使用 \history delete firstnumber-lastnumber 删除给定条目编号范围内的历史记录条目。如果 lastnumber 超过最后找到的历史记录条目编号,则会删除直到最后一个条目(包括最后一个条目)的历史记录条目。

  • 使用 \history delete number- 删除从 number 到最后一个条目(包括最后一个条目)的历史记录条目。

  • 使用 \history delete -number 删除从最后一个条目开始,向后计数的指定数量的历史记录条目。例如,\history delete -10 删除最后 10 个历史记录条目。

  • 使用 \history clear 删除所有历史记录。

默认情况下,历史记录不会在会话之间保存,因此当您退出 MySQL Shell 时,您在当前会话中发出的历史记录将丢失。如果您希望在会话之间保留历史记录,请启用 MySQL Shell 的 history.autoSave 选项。有关更多信息,请参阅 第 5.5 节,“代码历史记录”

重新哈希命令

当您禁用自动完成名称缓存功能时,请使用 \rehash 命令手动更新缓存。例如,在您通过发出 \use schema 命令加载新模式之后,请发出 \rehash 以更新自动完成名称缓存。此后,自动完成将知道数据库中使用的名称,并且您可以自动完成文本,例如表名等。请参阅 第 5.3 节,“代码自动完成”

选项命令

使用 \option 命令,您可以在所有模式下查询和更改 MySQL Shell 配置选项。您可以使用 \option 命令列出已设置的配置选项,并显示其值上次更改的方式。您也可以使用它来设置和取消设置选项,无论是针对会话还是在 MySQL Shell 配置文件中持久设置。

分页器命令

您可以将 MySQL Shell 配置为使用外部分页器来读取长屏幕输出,例如在线帮助或 SQL 查询的结果。请参阅 第 4.6 节,“使用分页器”

显示和监视命令

使用 \show 命令运行指定的报告,该报告可以是内置的 MySQL Shell 报告,也可以是已向 MySQL Shell 注册的用户定义报告。您可以指定命令的标准选项,以及报告支持的任何选项或附加参数。使用 \watch 命令以与使用 \show 命令相同的方式运行报告,但随后会定期刷新结果,直到您使用 Ctrl + C 取消命令。有关说明,请参阅 第 10.1.5 节,“运行 MySQL Shell 报告”

编辑命令

使用 \edit (\e) 命令,将在默认系统编辑器中打开一个命令以进行编辑,然后在 MySQL Shell 中显示编辑后的命令以执行。该命令也可以使用键组合 Ctrl-X Ctrl-E 调用。有关详细信息,请参阅 第 5.4 节,“编辑代码”

系统命令

使用 \system (\!) 命令运行您指定为命令参数的操作系统命令,然后在 MySQL Shell 中显示命令的输出。如果 MySQL Shell 无法执行命令,则会返回错误。命令的输出按操作系统提供的原样返回,不会由 MySQL Shell 的 JSON 包装函数或您指定用于显示输出的任何外部分页器工具处理。

query_attributes 命令

使用 query_attribute 命令和 session.setQueryAttributes 方法,您可以为 SQL 查询定义查询属性。MySQL Shell 的功能与 MySQL 客户端的功能相同。

注意

设置查询属性仅在经典 MySQL 协议上受支持。它不支持 X 协议会话。

有关更多信息,请参阅以下内容

设置查询属性示例

以下示例分别将属性 att1att2 设置为值 val1val2

  • SQL

    SQL> \query_attributes att1 val1 att2 val2
  • JavaScript

    JS> session.setQueryAttributes({att1:"val1",att2:"val2"})
  • Python

    PY> session.set_query_attributes({att1:"val1",att2:"val2"})

检索查询属性示例

可以使用 mysql_query_attribute_string() 函数检索属性。

例如

  • SQL

    SQL> select mysql_query_attribute_string("att1") as "Attribute 1", mysql_query_attribute_string("att2")as "Attribute 2"
         +-------------+-------------+
         | Attribute 1 | Attribute 2 |
         +-------------+-------------+
         | v1          | v2          |
         +-------------+-------------+
  • JavaScript

    JS> session.runSql("select mysql_query_attribute_string("att1") as "Attribute 1", mysql_query_attribute_string("att2")as "Attribute 2"')")
        +-------------+-------------+
        | Attribute 1 | Attribute 2 |
        +-------------+-------------+
        | v1          | v2          |
        +-------------+-------------+