MySQL Shell 8.4  /  ...  /  命令行集成概述

5.8.1 命令行集成概述

本节提供了命令行集成的概述和一些基本用法示例。有关更详细的信息,请参见 第 5.8.2 节,“命令行集成详情”.

以下内置 MySQL Shell 全局对象可用

  • session: 代表当前全局会话。

  • db: 代表全局会话的默认数据库,如果该会话是使用带有指定默认数据库的 X 协议连接建立的。参见 使用 MySQL 作为文档存储.

  • dba: 提供对 AdminAPI 的访问,用于管理 InnoDB 集群、InnoDB 集群集和 InnoDB 副本集部署。参见 第 6 章,MySQL AdminAPI.

  • cluster: 代表一个 InnoDB 集群。

  • clusterset: 代表一个 InnoDB 集群集。

  • rs: 代表一个 InnoDB 副本集。

  • shell: 提供对 MySQL Shell 函数的访问,例如 shell.options 用于配置 MySQL Shell 选项(参见 第 13.4 节,“配置 MySQL Shell 选项”)。

  • util: 提供对 MySQL Shell 实用程序的访问。参见 第 11 章,MySQL Shell 实用程序.

有关更多信息,请参见 第 4.5 节,“MySQL Shell 全局对象”.

MySQL Shell 命令行集成语法

重要

MySQL Shell 默认情况下会读取 MySQL 服务器选项文件和登录路径。因此,如果您连接到使用选项文件的 MySQL 服务器,它将默认情况下使用该选项文件,并尝试使用该配置创建全局会话。如果您不想使用选项文件,则必须在命令行中添加 --no-defaults

您可以通过启动 mysqlsh 应用程序并传递特殊的 -- 选项来访问命令行集成。当您以这种方式启动 MySQL Shell 时,-- 表示选项列表的结束(例如要连接的服务器、要使用的语言等),其后的所有内容都将传递给命令行集成。命令行集成支持基于 MySQL Shell 交互式界面中使用的对象和方法的特定语法。要使用命令行集成语法执行操作,请在您的终端中发出

mysqlsh [options] -- [shell_object]+ object_method [arguments]

语法元素是

  • shell_object 是一个字符串,它映射到一个 MySQL Shell 全局对象。命令行集成支持嵌套对象。要调用嵌套对象中的函数,请提供层次结构中用空格分隔的对象列表,以到达所需的对象。

  • object_method 是最后一个 shell_object 提供的方法的名称。方法名可以按照 JavaScript 或 Python 命名约定提供,也可以按照替代的命令行集成友好格式提供,其中所有已知函数都使用全小写字母,单词用连字符分隔。object_method 的名称会自动从标准 JavaScript 风格的 camelCase 名称转换,其中所有大小写变化都会被替换为 - 并转换为小写。例如,createCluster 会变成 create-cluster

  • arguments 是调用 object_method 时传递给它的参数。

shell_object 必须与公开的全局对象之一匹配,任何嵌套对象必须是列表中先前提供的对象的子对象。object_method 必须与列表中最后一个对象的方法之一匹配,并且必须在有效格式之一(JavaScript、Python 或命令行友好)中定义。如果它们不对应于有效的对象及其方法,MySQL Shell 将退出并返回状态 10。

参见 MySQL Shell 命令行集成示例 中的示例。

命令行集成中可用的对象

要了解命令行集成中哪些对象和方法可用,最好查询您正在使用的 MySQL Shell。这是因为除了与 MySQL Shell 捆绑在一起的标准对象之外,插件中的其他对象也可能被公开。

要获取命令行集成支持的对象列表

$ mysqlsh -- --help

这将显示一个对象列表和有关该对象提供的功能的简要说明。

要获取命令行集成中对 object 可用的函数列表

$ mysqlsh -- object --help

有关更多信息,请参见 第 5.8.2.4 节,“命令行帮助”.

MySQL Shell 命令行集成参数语法

可选的 arguments 列表必须遵循本节中描述的适合命令行使用的语法。特殊字符(例如空格或 \)和引号会在传递给 MySQL Shell 之前由您的系统 shell(bashcmd 等)进行处理。如果您不熟悉您的系统 shell 在解析命令时如何处理这些字符序列,那么您应该尽量避免它们。例如,要传递一个以引号作为参数的一部分的参数,例如 list, of, names,仅在命令行上使用该语法是不够的。您需要使用您的系统 shell 语法来转义这些引号。如果您没有这样做,那么 MySQL Shell 可能不会收到实际的引号。参见 第 5.8.2.2 节,“定义参数”.

参数列表中可以使用两种类型的参数:匿名参数和命名参数。匿名参数用于定义简单的类型参数,例如字符串、数字、布尔值、空值。命名参数用于定义列表参数的值和字典参数中的选项,它们是键值对,其中值是简单类型。它们的用法必须遵循以下模式

[positional_argument | named_argument]*

语法的各个部分都是可选的,可以以任何顺序给出。然后,这些参数将按照以下顺序转换为传递给方法调用的参数

  • 来自列表的命名参数会导致值追加到生成命名参数的列表参数中

  • 来自字典的命名参数会导致值添加到生成命名参数的字典参数中

  • 如果字典参数存在并且没有定义明确的选项,则这会导致它接受任何不属于其他列表或字典参数的命名参数

  • 提供给函数调用的任何剩余参数都将按照提供的顺序进行处理

MySQL Shell 命令行集成示例

使用命令行集成,调用 MySQL Shell API 函数比使用 --execute 选项更容易且更简洁。以下示例展示了如何使用此功能

  • 要检查服务器实例是否适合升级并将结果作为 JSON 返回以供进一步处理

      $ mysqlsh -- util check-for-server-upgrade --user=root --host=localhost --port=3301 --password='password' --outputFormat=JSON --config-path=/etc/mysql/my.cnf

    MySQL Shell 交互式模式中的等效命令

      mysql-js> util.checkForServerUpgrade({user:'root', host:'localhost', port:3301}, {password:'password', outputFormat:'JSON', configPath:'/etc/mysql/my.cnf'})
  • 要部署一个监听端口 1234 的 InnoDB 集群沙箱实例,并指定用于连接的密码

    $ mysqlsh -- dba deploy-sandbox-instance 1234 --password=password

    MySQL Shell 交互式模式中的等效命令

    mysql-js> dba.deploySandboxInstance(1234, {password: password})
  • 要使用监听端口 1234 的沙箱实例创建一个名为 mycluster 的 InnoDB 集群

    $ mysqlsh root@localhost:1234 -- dba create-cluster mycluster

    MySQL Shell 交互式模式中的等效命令

    mysql-js> dba.createCluster('mycluster')
  • 要检查使用监听端口 1234 的沙箱实例的 InnoDB 集群的状态

    $ mysqlsh root@localhost:1234 -- cluster status

    MySQL Shell 交互式模式中的等效命令

    mysql-js> cluster.status()
  • 要配置 MySQL Shell 以打开命令历史记录

    $ mysqlsh -- shell options set_persist history.autoSave true

    MySQL Shell 交互式模式中的等效命令

    mysql-js> shell.options.set_persist('history.autoSave', true);