Documentation Home
MySQL 外壳 8.0  / 第 5 章 MySQL Shell 代码执行  / 5.8 API 命令行集成  / 5.8.2 命令行集成细节  /  5.8.2.1 MySQL Shell API 函数的命令行集成

5.8.2.1 MySQL Shell API 函数的命令行集成

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

以交互方式使用MySQL Shell自带的API时,典型的函数语法如下:

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

这些参数定义了向 API 函数提供数据的顺序。在大多数情况下,API 函数需要特定数据类型的参数,但也有少数例外情况,其中特定参数可以处理多种数据类型。API 函数中用于参数的数据类型可以是以下之一:

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

  • 列表

  • 字典:键是字符串的键值对

  • 对象

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

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

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

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

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

要使用命令行集成调用全局对象公开的 API 函数,而不必在 MySQL Shell 中启动交互式会话,您必须以正确的方式提供所需的数据。这包括定义调用 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_functionshell_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 插件中定义的嵌套对象。

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

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

    $ 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]

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