MySQL Shell 经常更新修复和新功能。强烈建议您始终使用可用的最新版本。最新版本的 MySQL Shell 可以与任何 GA 版本的 MySQL 5.7 或 8.0 一起使用。
MySQL Shell 中提供了以下功能。
MySQL Shell 处理用 JavaScript、Python 和 SQL 编写的代码。根据当前活动的语言,任何已执行的代码都将作为这些语言之一进行处理。还有特定的 MySQL Shell 命令,前缀为\
,使您能够配置 MySQL Shell 而不管当前选择的语言。有关详细信息,请参阅
第 3.1 节,“MySQL Shell 命令”。
从版本 8.0.18 开始,MySQL Shell 使用 Python 3,而不是 Python 2.7。对于包含系统支持安装的 Python 3 的平台,MySQL Shell 使用可用的最新版本,最低支持版本为 Python 3.6。对于不包含 Python 3 或未达到最低支持版本的平台,MySQL Shell 将 Python 3.7.7 捆绑到 MySQL Shell 8.0.25,并将 Python 3.9.5 从 MySQL Shell 8.0.26 捆绑在一起。MySQL Shell 保持与 Python 2.6 和 Python 2.7 的代码兼容性,因此如果您需要这些旧版本之一,您可以使用适当的 Python 版本从源代码构建 MySQL Shell。
MySQL Shell 提供了一种交互式代码执行模式,您可以在 MySQL Shell 提示符下键入代码,然后处理每个输入的语句,并将处理结果打印在屏幕上。如果使用的终端支持,则支持 Unicode 文本输入。支持彩色终端。
可以使用命令编写多行代码,使 MySQL Shell 能够缓存多行代码,然后将它们作为单个语句执行。有关详细信息,请参阅 多行支持。
除了代码的交互式执行之外,MySQL Shell 还可以从不同的来源获取代码并对其进行处理。这种以非交互方式处理代码的方法称为 批处理。
由于批处理模式旨在用于单一语言的脚本处理,因此它仅限于具有最少的非格式化输出并禁用命令的执行。为避免这些限制,请使用--interactive
命令行选项,它告诉 MySQL Shell 执行输入,就好像它是交互式会话一样。在这种模式下,输入是逐行处理的,就好像每一行都是在交互式会话中键入的一样。有关详细信息,请参阅
第 5.6 节,“批处理代码执行”。
MySQL Shell 包括以下用 JavaScript 和 Python 实现的 API,您可以使用它们来开发与 MySQL 交互的代码。
-
AdminAPI 使您能够管理 MySQL 实例,使用它们创建 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet 部署,并集成 MySQL Router。
InnoDB Cluster 使用基于 InnoDB 的 MySQL 数据库为高可用性和可扩展性提供集成解决方案。InnoDB Cluster 是使用组复制的替代解决方案,无需高级 MySQL 专业知识。请参阅 第 7 章,MySQL InnoDB 集群。
InnoDB ClusterSet通过将主 InnoDB Cluster 与其在备用位置的一个或多个副本链接起来,为第 7 章MySQL InnoDB Cluster部署 提供容灾能力 。请参阅 第 8 章,MySQL InnoDB ClusterSet。
InnoDB ReplicaSet 使您能够管理一组运行异步基于 GTID 的复制的 MySQL 实例。请参阅 第 9 章,MySQL InnoDB ReplicaSet。
AdminAPI 还提供了为 MySQL Router 配置用户的操作,使与 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet 的集成尽可能简单。有关 AdminAPI 的更多信息,请参阅 第 6 章,MySQL AdminAPI。
当 MySQL Shell 使用 X 协议连接到 MySQL 服务器时,X DevAPI 使开发人员能够处理关系数据和文档数据。有关详细信息,请参阅 使用 MySQL 作为文档存储。有关 X DevAPI 的概念和用法的文档,请参阅 X DevAPI 用户指南。
MySQL Shell 旨在为所有支持 X 协议的 MySQL 产品提供一个集成的命令行客户端。MySQL Shell 的开发特性专为使用 X 协议的会话而设计。MySQL Shell 还可以使用经典的 MySQL 协议连接到不支持 X 协议的 MySQL 服务器。X DevAPI 的一组最小功能可用于使用经典 MySQL 协议创建的会话。
您可以以报告和扩展对象的形式定义 MySQL Shell 基本功能的扩展。可以使用 JavaScript 或 Python 创建报告和扩展对象,并且可以使用任何活动的 MySQL Shell 语言。您可以在 MySQL Shell 启动时自动加载的插件中保留报告和扩展对象。MySQL Shell 有几个内置的报告可供使用。有关详细信息,请参阅 第 10 章,扩展 MySQL Shell。
MySQL Shell 包括以下用于处理 MySQL 的实用程序:
升级检查器实用程序,用于验证 MySQL 服务器实例是否已准备好升级。用于
util.checkForServerUpgrade()
访问升级检查器。一个 JSON 导入实用程序,用于将 JSON 文档导入 MySQL 服务器集合或表。用于
util.importJSON()
访问导入实用程序。一个并行表导入实用程序,它拆分单个数据文件并使用多个线程将块加载到 MySQL 表中。
有关详细信息,请参阅第 11 章,MySQL Shell 实用程序。
MySQL Shell 使用 API 命令语法公开其大部分功能,使您能够轻松地将
mysqlsh与其他工具集成。例如,您可以创建bash脚本来管理具有此功能的 InnoDB 集群。使用语法将操作直接传递给 MySQL Shell 全局对象,绕过 REPL 接口。请参阅
第 5.8 节,“API 命令行集成”。
mysqlsh
[options]
--
shell_object
object_method
[method_arguments]
MySQL Shell 可以以表格、选项卡式或垂直格式或 JSON 输出形式返回结果。为了帮助将 MySQL Shell 与外部工具集成,您可以在从命令行启动 MySQL Shell 时为所有输出激活 JSON 包装。有关详细信息,请参阅第 5.7 节,“输出格式”。
MySQL Shell 可以在您选择的详细级别记录有关执行过程的信息。可以将日志记录信息发送到应用程序日志文件、其他可查看目标和控制台的任意组合。有关详细信息,请参阅 第 12 章,MySQL Shell 日志记录和调试。
在 MySQL Shell 中,与 MySQL Server 实例的连接由会话对象处理。当您与 MySQL 服务器实例建立第一个连接时(可以在启动 MySQL Shell 时或之后完成),将
session
创建一个名为 MySQL Shell 的全局对象来表示此连接。此会话称为全局会话,因为它可用于所有 MySQL Shell 执行模式。在 SQL 模式下,全局会话用于执行语句,在 JavaScript 模式和 Python 模式下,它可通过名为session
. mysqlx
您可以使用 JavaScript和Python 模块中可用的函数创建更多会话对象mysql
,并且可以将这些会话对象之一设置为
session
全局对象,因此您可以在任何模式下使用它。有关详细信息,请参阅
第 4.2 节,“MySQL Shell 会话”。