本节提供了命令行集成的概述和一些基本用法示例。有关更详细的信息,请参见 第 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'})
-
要部署一个监听端口 1234 的 InnoDB 集群沙箱实例,并指定用于连接的密码
$ mysqlsh -- dba deploy-sandbox-instance 1234 --password=password
MySQL Shell 交互式模式中的等效命令
mysql-js> dba.deploySandboxInstance(1234, {password: password})
-
要使用监听端口 1234 的沙箱实例创建一个名为
mycluster
的 InnoDB 集群$ 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);