このペジは機械翻訳したものです。

7.3.3 MySQL Shellプラグeconeconンの例

例7.3レポMySQL Shellプラグ

この例では,現在実行中のプロセスを表示する関数show_processes ()と,指定されたidを持kill_process ()を定義します。show_processes ()はMySQL Shellレポトになりkill_process ()は拡張オブジェクトによって提供される関数になります。

このコドは,shell.register_report ()メソッドを使用して,show_processes ()をMySQL Shellレポトprocとして登録します。kill_process ()ext.process.kill ()として登録するには,グロバルオブジェクトextおよび拡張オブジェクト过程がすでに存在するかどうかをチェックし,存在しない場合は作成して登録します。その後,kill_process ()関数がメンバとして过程拡張オブジェクトに追加されます。

プラグ邮箱ンコ邮箱ドはファ邮箱ル~ / .mysqlsh /插件/ ext /过程/ init.pyとして保存されます。起動時に,MySQL Shellは插件フォルダ内のフォルダをトラバ,スし,このinit.pyファ邮箱ルを検索してコ邮箱ドを実行します。レポトprocおよび関数杀了()が登録され,使用できるようになります。グロバルオブジェクトextおよび拡張オブジェクト过程は,別のプラグインによってまだ登録されていない場合は作成および登録され,それ以外の場合は既存のオブジェクトが使用されます。

#定义一个show_processes函数来生成一个MySQL Shell报告def show_processes(session, args, options): query = "SELECT ID, USER, HOST, COMMAND, INFO FROM INFORMATION_SCHEMA。PROCESSLIST" if (options.has_key('command')): query += " WHERE command = '%s'" % options['command'] result = session.sql(query).execute();report = [] if (result.has_data()): report = [result.get_column_names()] for row in result.fetch_all(): report.append(list(row)) return {"report": report} #定义一个kill_process函数,它将由全局对象'ext'公开sql("KILL CONNECTION %d" % id).execute() #将show_processes函数注册为MySQL Shell报告Shell。register_report("proc", "list", show_processes, {"brief":"列出目标服务器上的进程","options": [{"name": "command", "shortcut": "c", "brief":"使用此选项列出特定命令上的进程。"}]}) #将kill_process函数注册为ext.process.kill() #检查全局对象'ext'是否已经注册如果'ext'在globals(): global_obj = ext else: #否则注册新的全局对象'ext' global_obj = shell.create_extension_object() shell。register_global("ext", global_obj, {"brief":"MySQL Shell扩展插件"})#添加'process'扩展对象作为'ext'全局对象的成员:如果'process'扩展对象还没有注册,现在就注册plugin_obj = shell.create_extension_object() shelladd_extension_object_member(global_obj, "process", plugin_obj, {"brief": "进程操作的实用程序对象"})#添加kill_process函数到'process'扩展对象作为成员'kill' try: shell。add_extension_object_member(plugin_obj, "kill", kill_process, {"brief": "杀死指定ID的进程。","parameters": [{" name":"session", "type":"object", "class":" session", "brief": "操作中要使用的会话。"}, {"name":"id", "type":"integer", "brief": "被终止进程的id。"Exception as e: shell.log("ERROR", "Failed to register ext.process.kill ({0}).")格式(str (e) .rstrip ()))

ここで,ユザはMySQL Shell\显示コマンドを使用してレポトprocを実行し,ext.process.kill ()関数を使用してリストされているプロセスのいずれかを停止します:

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