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中,one和true是匿名参数:$ 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可以出现在任何地方,因为它们首先被处理并与相应的参数相关联。一旦处理了命名参数,匿名参数就会以位置方式处理。