5.8.1 命令行集成概述

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

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

  • session- 代表当前的全球会议。

  • db- 表示全局会话的默认数据库,前提是该会话是使用 X 协议连接与指定的默认数据库建立的。请参阅使用 MySQL 作为文档存储

  • dba- 提供对 AdminAPI 的访问,用于管理 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet 部署。请参阅 第 6 章,MySQL AdminAPI

  • cluster- 代表一个 InnoDB 集群。

  • rs- 代表一个 InnoDB ReplicaSet。

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

  • util- 提供对 MySQL Shell 实用程序的访问。请参阅第 11 章,MySQL Shell 实用程序

有关详细信息,请参阅 第 4.5 节,“MySQL Shell 全局对象”

MySQL Shell 命令行集成语法

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

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

语法元素是:

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

  • object_method是最后一个提供的方法的名称 shell_object。方法名称可以按照 JavaScript 或 Python 命名约定或替代的命令行集成友好格式提供,其中所有已知函数均使用小写字母,单词由连字符分隔。a 的名称 object_method会自动从标准 JavaScript 样式的驼峰式命名转换而来,其中所有大小写更改都将替换为 a -并变为小写。例如,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'})
  • 要部署 InnoDB Cluster 沙箱实例,侦听端口 1234 并指定用于连接的密码:

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

    MySQL Shell 交互模式下的等效命令:

    mysql-js> dba.deploySandboxInstance(1234, {password: password})
  • 要使用侦听端口 1234 的沙箱实例并指定名称来创建 InnoDB 集群 mycluster

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

    MySQL Shell 交互模式下的等效命令:

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

    $ 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);