社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL Shell插件 - 简介

老叶茶馆 • 5 年前 • 485 次点击  

作者:Rene Ramirez 译:徐轶韬

本文转载自“MySQL解决方案工程师”公众号


MySQL Shell 8.0.17引入了一种通过插件来扩展基本功能的新方法,插件使用JavaScript或Python脚本,允许用户:

  • 通过 show和 watch shell命令注册一个可用于监视任务的报告。

  • 使用自定义功能创建和注册新的全局对象。

插件的构成

插件是一个包含插件注册文件的文件夹,它将在shell启动时执行。

插件注册文件是一个名为init.js的JavaScript文件和名为init.pyPython文件(在本篇博客文章的其余部分将其称为 init文件)。

shell启动时会自动加载插件,因此,插件文件夹必须位于用户配置的plugins路径文件夹中:

  • Windows:%appdata%/ MySQL / mysqlsh / plugins

  • 其他:〜/ .mysqlsh / plugins

当shell启动时,它将遍历plugins目录的内容,  标识包含init文件的所有文件夹init文件是将要加载的插件。通过在相应的语言上下文中执行init文件来加载它们。

使用插件扩展shell

shell全局对象包含以下函数,可以通过注册用户定义的报告或扩展对象来实现shell功能扩展:

  • shell.registerReport(name,type,report [,description])注册用户定义的报告。

  • shell.createExtensionObject()创建一个扩展对象(之后可以注册为全局对象)。

  • shell.addExtensionObjectMember(object,name,member [,definition])将新成员添加到扩展对象中。

  • shell.registerGlobal(name,object [,definition])将扩展对象注册为shell全局对象。

在执行init文件时,一部分shell全局对象是开箱即用的,也就是说,它们可以立即在init文件上使用。

这些对象包括:

  • shell 对象。

  • dba 对象。

  • mysql 模块。

  • mysqlx 模块。

使用上面列出shell对象的函数,init文件可以扩展shell功能。

使用shell插件添加报告

8.0.16开始提供报告功能。在本节中,我们将创建一个简单的报告来监控InnoDB集群的状态。

.mysqlsh/plugins/monitor/init.js文件包含以下内容:

一个后端函数,它将返回与指定会话关联的集群对象:

JavaScript中自带的后端报告函数,在集群成员建立全局会话时,创建集群状态报告:

将上述函数注册成为报告,使其可以与

show 和   watch shell命令一起使用:

启动Shell后,将加载插件并使用 show和 

  watch命令执行新的  status 报告  

使用shell插件添加新的全局对象

通过shell扩展对象,可以轻松扩展shell的基本功能。通常,扩展shell的过程包括:

  • 创建扩展对象。

  • 向扩展对象添加函数。

  • 注册扩展对象。

在使用InnoDB集群时,集群对象已经提供了很多特性,这些特性的例子包括describe()和satus()函数。假设我们想添加一个特定的用例,并且需要一个函数来检索InnoDB集群成员的列表。

让我们定义一个名为idc的新对象,它将与全局会话关联的InnoDB集群一起工作,并具有一个函数getMembers,该函数将返回集群成员列表,而不提供任何附加信息

让我们添加代码来更新现有的插件。


这是后端函数,它将提供我们想要的功能。

现在我们创建扩展对象,将函数添加到其中,并将其注册为全局对象:


当shell启动时,加载插件,与此同时新的idc全局对象将变成可用:


集成帮助功能
shell扩展的主要方面是允许用户将额外的功能集成到shell中,与此同时,提供关于它的文档也非常重要的。新功能的三个函数提供以下选项以定义帮助信息:
brief:简短描述正在注册的报告/对象/函数。
details:它是一个字符串列表,包含关于正在注册的报告/函数/对象的详细信息。这个列表里的每个字符串,在显示的帮助信息时都是一个单独的段落。


请持续关注!
有关此主题的其他博客文章将会持续发表,包括:
MySQL Shell 插件-数据验证:当将函数注册到扩展对象中时,它将指导您通过不同的数据验证选项。
MySQL Shell 插件-插件组:它解释了如何组织你的插件,使他们包含在一个单一的全局对象里面。
一种Python方法:它解释了如何将Python模块与MySQL Shell插件组合起来创建复杂的插件。


资源
有关MySQL Shell插件的详细信息,请参阅MySQL Shell用户指南。
不要忘记下载并尝试一下,欢迎您的反馈!
您可以通过https://mysqlcommunity.slack.com/的#shell频道与我们联系




由叶老师主讲的知数堂「MySQL优化课」第17期已发车,课程从第15期就升级成MySQL 8.0版本了,现在上车刚刚好,扫码开启MySQL 8.0的修行之旅吧。


另外,叶老师在腾讯课堂《MySQL性能优化》精编版第一期已完结,本课程讲解读几个MySQL性能优化的核心要素:合理利用索引,降低锁影响,提高事务并发度

下面是自动拼团的二维码,组团价仅需78元

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62067
 
485 次点击