本节概述了命令行集成和一些基本用法示例。有关更详细的信息,请参见 第 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 服务器选项文件和登录路径。因此,如果您连接到使用选项文件的 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 节,“命令行帮助”。
arguments
列表是可选的,所有参数都必须遵循本节中描述的适合命令行使用的语法。特殊字符(例如空格或 \)和引号在传递给 MySQL Shell 之前由您的系统 shell(bash、cmd 等)处理。如果您不熟悉您的系统 shell 在解析命令时如何处理这些字符序列,您应该尽量避免它们。例如,要传递一个参数,其中引号作为参数的一部分,例如 “list, of, names”,仅在命令行上使用该语法是不够的。您需要使用您的系统的 shell 语法来转义这些引号。如果您不这样做,那么 MySQL Shell 可能无法接收实际的引号。参见 第 5.8.2.2 节,“定义参数”。
参数列表中可以使用两种类型的参数:匿名参数和命名参数。匿名参数用于定义简单的类型参数,例如字符串、数字、布尔值、空值。命名参数用于定义列表参数的值和字典参数中的选项,它们是键值对,其中值是简单类型。它们的用法必须遵循以下模式
[positional_argument | named_argument]*
语法的各个部分都是可选的,可以按任何顺序给出。然后,这些参数将转换为传递给方法调用的参数,顺序如下
来自列表的命名参数会导致将值追加到生成命名参数的列表参数中
来自字典的命名参数会导致将值添加到生成命名参数的字典参数中
如果存在一个字典参数,并且没有定义明确的选项,则会导致它接受 任何 不属于其他列表或字典参数的命名参数
提供给函数调用的任何剩余参数都将按提供的顺序进行处理
使用命令行集成,调用 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 集群沙盒实例,监听端口 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 集群的状态
$ 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);