9.3.3示例MySQL插件

9.3示例MySQL壳插件包含报告和一个扩展对象

这个例子定义了一个函数show_processes ()显示当前运行的进程和一个函数kill_process ()杀死一个过程和一个指定的ID。show_processes ()是一个MySQL壳报告,kill_process ()是一个函数提供了一个扩展对象。

代码注册show_processes ()作为一个MySQL壳报告proc使用shell.register_report ()方法。注册kill_process ()作为ext.process.kill (),检查是否全局对象的代码ext和扩展对象过程已经存在,并创建并注册他们如果不是。的kill_process ()然后添加一个成员函数过程扩展对象。

插件代码保存为文件~ / .mysqlsh /插件/ ext /过程/ init.py。在启动时,MySQL壳牌遍历文件夹在插件文件夹中,定位init.py文件,并执行代码。这份报告proc和功能杀了()注册和使用。全局对象ext和扩展对象过程创建和注册如果他们尚未注册另一个插件,否则使用现有对象。

#定义一个show_processes函数生成一个MySQL壳报告def show_processes(会话、参数选项):查询= "选择ID、用户、主机命令,从INFORMATION_SCHEMA信息。PROCESSLIST“如果(options.has_key(“命令”)):查询+ =”命令=“% s”%选项(“命令”)结果= session.sql(查询). execute ();报告=[]如果(result.has_data()):报告= [result.get_column_names()]在result.fetch_all行():report.append(列表(行))返回{“报告”:报告}#定义一个kill_process函数将会暴露的全局对象的ext def kill_process(会话id):结果=会话。sql(“杀死连接% d % id) . execute () # show_processes函数注册为一个MySQL壳壳报告。register_report(“过程”、“列表”,show_processes{“短暂”:“列出目标服务器上的过程。”“选项”:[{“名称”:“命令”,“快捷方式”:“c”,“简单”:“使用这个选项列表过程具体的命令。”}]}) # Register the kill_process function as ext.process.kill() # Check if global object 'ext' has already been registered if 'ext' in globals(): global_obj = ext else: # Otherwise register new global object named 'ext' global_obj = shell.create_extension_object() shell.register_global("ext", global_obj, {"brief":"MySQL Shell extension plugins."}) # Add the 'process' extension object as a member of the 'ext' global object try: plugin_obj = global_obj.process except IndexError: # If the 'process' extension object has not been registered yet, do it now plugin_obj = shell.create_extension_object() shell.add_extension_object_member(global_obj, "process", plugin_obj, {"brief": "Utility object for process operations."}) # Add the kill_process function to the 'process' extension object as member 'kill' try: shell.add_extension_object_member(plugin_obj, "kill", kill_process, {"brief": "Kills the process with the given ID.", "parameters": [ { "name":"session", "type":"object", "class":"Session", "brief": "The session to be used on the operation." }, { "name":"id", "type":"integer", "brief": "The ID of the process to be killed." } ] }) except Exception as e: shell.log("ERROR", "Failed to register ext.process.kill ({0}).". format(str(e).rstrip()))

在这里,用户运行报告proc使用MySQL壳\显示命令,然后使用ext.process.kill ()函数停止上市流程之一:

mysql-py > \显示proc +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -用户主机命令| | | + | | ID信息| +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | 66 |根localhost: 53998 | |查询插件:选择ID、用户、主机、命令,从INFORMATION_SCHEMA信息。PROCESSLIST | | 67 | |根localhost: 34022 |睡眠零| | | 4 | event_scheduler | localhost |守护进程零| | +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + mysql-py > ext.process。杀(会话,67)mysql-py > \显示proc +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -用户主机命令| | | + | | ID信息| +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | 66 |根localhost: 53998 | |查询插件:选择ID、用户、主机、命令,从INFORMATION_SCHEMA信息。PROCESSLIST | | 4 | event_scheduler | localhost |守护进程零| | +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +