searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

MySQL-Shell插件说明

2024-09-10 09:23:42
2
0

MySQL-Shell插件使用主要包括Reporting with MySQL ShellMySQL Shell Extension Objects的形式。MySQL Shell Extension Objects相对更加灵活,以下主要以此种模式为例说明。

配置说明

mysqlsh插件路径

Unix: ~/.mysqlsh/plugins 或~/.mysqlsh/init.d

Windows: %AppData%\MySQL\mysqlsh\plugins

通过设置MYSQLSH_USER_CONFIG_HOME自定义,默认MYSQLSH_USER_CONFIG_HOME=~/.mysqlsh

指定 --log-level 参数时可记录详细调试信息到 ~/.mysqlsh/mysqlsh.log

mysqlsh插件加载后的全局变量

  • The built in global objects shell, dba, and util.

  • The Shell API main module mysql.

  • The X DevAPI main module mysqlx.

  • The AdminAPI main module dba.

要求

  • 相关的文件夹(plugin or plugin group)符合python的PEP8规范,仅使用字母、数字、下划线;

  • 里层每个视作package的文件夹都应包含 __init__.py文件,init.py 用于标识当前文件夹是一个包;

  • import的时候,必须指定package的全路径,如plugin group(ext)包含了plugin(demo),demo的包src中包含的模块sample,需要以如下格式导入:

    from ext.demo.src import sample

创建plugin group

plugin group可以包含JavaScript和python类型的plugin,可用于存放plugins的公共内容

  • Plugins that provide reports on a particular theme.

  • Plugins that reuse the same common code.

  • Plugins that add functions to the same extension object.

plugin文件夹中必须包含 init.py 或 init.js 文件用来初始化扩展,若不包含mysqlsh将其视作plugin group并在里面搜索plugin的初始化脚本。子文件夹里(.)开头的文件夹会被忽略。

例如:

ext/  # plugin group
├── common   # 建议存放公共函数,以ext.common.xxx形式导入
│   ├── __init__.py
│   └── showMaster.py
├── process
│   └── init.py  # plugin
└── table
  └── init.py  # plugin

MySQL Shell Extension Objects

8.0.17以后的mysqlsh提供了这个能力,可以更加灵活地在mysqlsh中使用自己写的pyrhon脚本

主要函数

shell.create_extension_object():创建扩展对象

shell.register_globals(name, object[, definition])

name: 全局对象名(内建的全局对象 ( db, dba, cluster, session, shell, util) )

object:注册的全局对象

definition:可选,brief、details等描述性信息

shell.addExtensionObjectMember(object, name, member[, definition])

object:父类扩展对象

name:扩展对象的成员名

member:扩展成员,可以是基本数据类型、函数或者extension object

definition:可选,除brief、details外,还有parameters(dict类型的list,可以起到某些约束作用,具体的key信息可查询官方文档)

1、直接调用

# ext的help信息,可以看到自定义的process属性以及help信息
MySQL  10.142.90.80:8018 ssl Py > ext.help()
NAME
    ext - MySQL Shell extension plugins.

DESCRIPTION
    MySQL Shell extension plugins.

PROPERTIES
    process
          Utility object for process operations.

FUNCTIONS
    help([member])
          Provides help about this object and it's members

# process的help信息,可以看到help函数以及自定义的kill函数信息
MySQL  10.142.90.80:8018 ssl Py > ext.process.help()
NAME
    process - Utility object for process operations.

SYNTAX
    ext.process

DESCRIPTION
    Utility object for process operations.

FUNCTIONS
    help([member])
          Provides help about this object and it's members

     kill(session, id)
          Kills the process with the given ID.
           
# 使用,kill掉对应的connection id
MySQL  10.142.90.80:8018 ssl Py > ext.process.kill(session, 2241114)

一般python类的动态加载

zgj.py,将要加载的文件放在python的sys.path路径下,可通过print(sys.path)查看

def show_users(session):
   query = "SELECT user from mysql.user"
 
   result = session.run_sql(query)
   report = []
   if (result.has_data()):
       report = [result.get_column_names()]
       for row in result.fetch_all():
           report.append(list(row))    
​
   return {"report": report}

使用

 MySQL  10.142.90.80:8018 ssl  Py > import zgj
MySQL  10.142.90.80:8018 ssl Py > zgj.show_users(session)
0条评论
0 / 1000
zzzzgj
9文章数
1粉丝数
zzzzgj
9 文章 | 1 粉丝
原创

MySQL-Shell插件说明

2024-09-10 09:23:42
2
0

MySQL-Shell插件使用主要包括Reporting with MySQL ShellMySQL Shell Extension Objects的形式。MySQL Shell Extension Objects相对更加灵活,以下主要以此种模式为例说明。

配置说明

mysqlsh插件路径

Unix: ~/.mysqlsh/plugins 或~/.mysqlsh/init.d

Windows: %AppData%\MySQL\mysqlsh\plugins

通过设置MYSQLSH_USER_CONFIG_HOME自定义,默认MYSQLSH_USER_CONFIG_HOME=~/.mysqlsh

指定 --log-level 参数时可记录详细调试信息到 ~/.mysqlsh/mysqlsh.log

mysqlsh插件加载后的全局变量

  • The built in global objects shell, dba, and util.

  • The Shell API main module mysql.

  • The X DevAPI main module mysqlx.

  • The AdminAPI main module dba.

要求

  • 相关的文件夹(plugin or plugin group)符合python的PEP8规范,仅使用字母、数字、下划线;

  • 里层每个视作package的文件夹都应包含 __init__.py文件,init.py 用于标识当前文件夹是一个包;

  • import的时候,必须指定package的全路径,如plugin group(ext)包含了plugin(demo),demo的包src中包含的模块sample,需要以如下格式导入:

    from ext.demo.src import sample

创建plugin group

plugin group可以包含JavaScript和python类型的plugin,可用于存放plugins的公共内容

  • Plugins that provide reports on a particular theme.

  • Plugins that reuse the same common code.

  • Plugins that add functions to the same extension object.

plugin文件夹中必须包含 init.py 或 init.js 文件用来初始化扩展,若不包含mysqlsh将其视作plugin group并在里面搜索plugin的初始化脚本。子文件夹里(.)开头的文件夹会被忽略。

例如:

ext/  # plugin group
├── common   # 建议存放公共函数,以ext.common.xxx形式导入
│   ├── __init__.py
│   └── showMaster.py
├── process
│   └── init.py  # plugin
└── table
  └── init.py  # plugin

MySQL Shell Extension Objects

8.0.17以后的mysqlsh提供了这个能力,可以更加灵活地在mysqlsh中使用自己写的pyrhon脚本

主要函数

shell.create_extension_object():创建扩展对象

shell.register_globals(name, object[, definition])

name: 全局对象名(内建的全局对象 ( db, dba, cluster, session, shell, util) )

object:注册的全局对象

definition:可选,brief、details等描述性信息

shell.addExtensionObjectMember(object, name, member[, definition])

object:父类扩展对象

name:扩展对象的成员名

member:扩展成员,可以是基本数据类型、函数或者extension object

definition:可选,除brief、details外,还有parameters(dict类型的list,可以起到某些约束作用,具体的key信息可查询官方文档)

1、直接调用

# ext的help信息,可以看到自定义的process属性以及help信息
MySQL  10.142.90.80:8018 ssl Py > ext.help()
NAME
    ext - MySQL Shell extension plugins.

DESCRIPTION
    MySQL Shell extension plugins.

PROPERTIES
    process
          Utility object for process operations.

FUNCTIONS
    help([member])
          Provides help about this object and it's members

# process的help信息,可以看到help函数以及自定义的kill函数信息
MySQL  10.142.90.80:8018 ssl Py > ext.process.help()
NAME
    process - Utility object for process operations.

SYNTAX
    ext.process

DESCRIPTION
    Utility object for process operations.

FUNCTIONS
    help([member])
          Provides help about this object and it's members

     kill(session, id)
          Kills the process with the given ID.
           
# 使用,kill掉对应的connection id
MySQL  10.142.90.80:8018 ssl Py > ext.process.kill(session, 2241114)

一般python类的动态加载

zgj.py,将要加载的文件放在python的sys.path路径下,可通过print(sys.path)查看

def show_users(session):
   query = "SELECT user from mysql.user"
 
   result = session.run_sql(query)
   report = []
   if (result.has_data()):
       report = [result.get_column_names()]
       for row in result.fetch_all():
           report.append(list(row))    
​
   return {"report": report}

使用

 MySQL  10.142.90.80:8018 ssl  Py > import zgj
MySQL  10.142.90.80:8018 ssl Py > zgj.show_users(session)
文章来自个人专栏
zzz
9 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0