MySQL Shell 8.4  /  ...  /  命令行集成用于 MySQL Shell API 函数

5.8.2.1 命令行集成用于 MySQL Shell API 函数

MySQL Shell 提供全局对象,用于公开不同的功能,例如用于 InnoDB 集群和 InnoDB 副本集管理操作的 dba,用于实用程序函数的 util,等等。全局对象提供在 MySQL Shell 的脚本模式中调用的函数。除了交互式 MySQL Shell 集成之外,您还可以使用命令行集成直接从终端调用对象函数,从而使您能够轻松地与其他工具集成。

当您在交互模式下使用 MySQL Shell 附带的 API 时,典型的函数语法如下所示

object.functionName(parameter1, parameter2, ..., parameterN)

参数定义了应该将数据提供给 API 函数的顺序。在大多数情况下,API 函数期望参数具有特定数据类型,但是有一些例外,其中特定参数可以处理多种数据类型。API 函数中参数使用的数据类型可以是以下之一

  • 标量:字符串、数字、布尔值、空值

  • 列表

  • 字典:键值对,其中键是字符串

  • 对象

列表参数通常被限制为包含预定义数据类型元素,例如字符串列表,但是,可能存在支持不同数据类型项目的列表参数。

字典参数接受key-value 对,其中keys 是字符串。与键关联的value 通常预期为预定义数据类型。但是,可能存在某些情况下,同一键支持不同数据类型的值。因此,字典参数可以是以下类型之一

  • 允许一组预定义的键值对,在这种情况下,指定不在预定义集中的键会导致错误。

  • 不存在预定义的键值对集,字典接受任何键

换句话说,一些字典参数指定哪些键是有效的。对于那些参数,尝试使用该集合之外的键会导致错误。当不存在预定义的值集时,可以使用任何数据类型的任何值。没有预定义键列表的字典参数接受任何键值对,只要键不在另一个字典参数的预定义集中即可。

若要使用命令行集成来调用全局对象公开的 API 函数,而不必在 MySQL Shell 中启动交互式会话,您必须以正确的方式提供必要的数据。这包括定义 API 函数的调用方式,以及将 API 函数的参数从命令行参数映射到 API 参数的方式。

重要

并非所有 MySQL Shell 函数都通过命令行集成公开。例如,像 dba.getCluster() 这样的函数依赖于返回一个对象,该对象随后用于进一步的操作。此类操作不会通过命令行集成公开。

类似地,MySQL Shell 命令行集成不支持对象作为参数。任何具有对象类型参数的 API 函数都不能与命令行集成一起使用。对象的生存期仅限于创建它的 MySQL Shell 调用的生存期。由于 mysqlsh 在通过此 API 语法执行对象方法后立即退出,因此从 API 调用接收或传递到 API 调用的任何对象将立即超出范围。在开发要通过命令行集成公开的 MySQL Shell 插件时,应考虑这一点。

从命令行调用 MySQL Shell API 函数的一般格式是

$ mysqlsh [shell options] -- [shell_object]+ object_function [anonymous_arguments|named arguments]*

其中

  • shell_object:指定一个全局对象,该对象具有为命令行使用公开的函数。支持以空格分隔的列表中的嵌套对象。

  • object_function:指定应执行的最后一个 shell_object 的 API 函数。

  • [anonymous_arguments|named arguments]*:指定传递给 object_function 调用的参数

对于大多数可用的 API,都需要一个单个对象,例如

$ mysqlsh -- shell status

但对于嵌套对象,必须指示对象列表。例如,要调用由 shell.options 公开的函数,例如 setPersist(optionName, value),请使用以下语法

$ mysqlsh -- shell options set-persist defaultMode py

在 MySQL Shell 插件中定义的嵌套对象也可能发生类似情况。

传递给函数的参数可以分为以下类型

  • 匿名参数:提供给命令的原始值。例如,在以下调用中,1onetrue 是匿名参数

    $ mysqlsh -- object command 1 one true
  • 命名参数:以 --key=value 的形式提供的键值对。例如,在以下调用中,--sample--path 是命名参数

    $ mysqlsh -- object command 1 one true --sample=3 --path=some/path

鉴于此参数划分,从命令行集成调用 API 函数的一般格式是

$ mysqlsh [shell options] -- object command [anonymous arguments][named arguments]

任何anonymous arguments 的顺序都很重要,因为它们以位置方式处理。另一方面,named arguments 可以出现在任何位置,因为它们首先被处理并与相应的参数关联。处理完命名参数后,匿名参数以位置方式处理。