文件首頁
VS Code 的 MySQL Shell


VS Code 的 MySQL Shell  /  MySQL Shell 控制台  /  擴充 MySQL Shell 控制台

正式發行前:2024-07-17

5.10 擴充 MySQL Shell 控制台

您可以定義對 MySQL Shell 控制台基本功能的擴充功能,形式為報表和擴充物件。可以使用 JavaScript 或 Python 建立報表和擴充物件,而且無論使用中的 MySQL Shell 語言為何,都可以使用這些報表和擴充物件。

本節說明

MySQL Shell 外掛程式

您可以使用在啟動時載入的使用者定義外掛程式擴充 MySQL Shell。外掛程式可以使用 JavaScript 或 Python 撰寫,而且它們包含的函數在 JavaScript 和 Python 模式的 MySQL Shell 中都可用。

MySQL Shell 外掛程式可用來包含註冊為MySQL Shell 報表的函數。單一外掛程式可以包含和註冊多個函數,而且可以包含報表和擴充物件成員的混合。當 MySQL 完成啟動時,MySQL Shell 外掛程式註冊為報表或擴充物件成員的函數會立即可以使用。

MySQL Shell 外掛程式是一個資料夾,其中包含適用於該語言的初始化指令碼(init.jsinit.py 檔案)。初始化指令碼是外掛程式的進入點。外掛程式只能包含一種語言的程式碼,因此如果您要建立具有 Python 定義成員和 JavaScript 定義成員混合的擴充物件,則必須將成員儲存為單獨的適用於該語言的外掛程式。

當 MySQL Shell 啟動時,外掛程式會自動載入,為此,外掛程式資料夾必須位於組態路徑的 plugins 資料夾中

  • Windows:C:\Users\<user>\.vscode\extensions\oracle.mysql-shell-for-vs-code-1.2.1-win32-x64\shell\lib\mysqlsh\plugins

  • Unix:/home/<user>/.vscode/extensions/oracle.mysql-shell-for-vs-code-1.1.8/shell/lib/mysqlsh/plugins

當內嵌的 MySQL Shell 啟動時,它會讀取 Plugins 資料夾的內容,並識別包含 init 檔案的所有子資料夾。此類 init 檔案。當 MySQL Shell 識別所有外掛程式時,它會藉由執行 JavaScript 或 Python 中的 init 檔案來開始載入它們。

使用外掛程式擴充 MySQL Shell

shell 全域物件包含下列函數,可用於透過註冊使用者定義的報表或擴充物件來擴充 MySQL Shell 功能

使用者定義的報表或擴充物件 描述
shell.registerReport(name, type, report[, description]) 註冊使用者定義的報表。
shell.createExtensionObject() 建立擴充物件(稍後可以註冊為全域物件)。
shell.addExtensionObjectMember(object, name, member[,definition]) 將新成員新增至擴充物件中。
shell.registerGlobal(name, object[, definition]) 將擴充物件註冊為 Shell 全域物件。

使用 MySQL Shell 外掛程式建立報表

在下列範例中,我們建立一個簡單的報表來監視 InnoDB Cluster 的狀態。

../plugins/monitor/init.js 檔案包含一個後端 JavaScript 函數,該函數會傳回與指定工作階段相關聯的叢集物件

function get_cluster(session, context) {
  if (session) {
    try {
      return dba.getCluster();
    } catch (err) {
      throw "A session to a cluster instance is required: " + err.message
    } 
  } else {
    throw "A session must be established to execute this " + context
  }
}

當全域工作階段建立到 InnoDB Cluster 成員時,以 JavaScript 撰寫的報表後端函數會產生 InnoDB Cluster 狀態報表

// The report backend function in native JavaScript which will be
// used to generate the cluster status report.
function cluster_status(session, argv, options) {
  // Gets the cluster using the backend function above
  var cluster = get_cluster(session, "report")

  // Prints the Cluster status
  println(cluster.status())

  // A report must return a list always
  return {report:[]}
}

將上述函數註冊為報表

shell.registerReport("idc_status", "print", cluster_status,
  {brief: "Monitors the status of the cluster where the global session is connected"})