MySQL Shell 8.4  /  ...  /  MySQL Shell API 函數的命令列整合

5.8.2.1 MySQL Shell API 函數的命令列整合

MySQL Shell 提供全域物件,這些物件會公開不同的功能,例如 dba 用於 InnoDB Cluster 和 InnoDB ReplicaSet 管理作業,util 用於公用程式函數等等。全域物件會提供可從 MySQL Shell 的指令碼模式呼叫的函數。除了互動式 MySQL Shell 整合之外,您也可以使用命令列整合,直接從終端機呼叫物件函數,讓您輕鬆與其他工具整合。

當您在互動模式中使用 MySQL Shell 隨附的 API 時,典型的函數語法如下

object.functionName(parameter1, parameter2, ..., parameterN)

參數會定義應將資料提供給 API 函數的順序。在大多數情況下,API 函數會預期參數具有特定的資料類型,但也有少數例外情況,特定參數可以處理多種資料類型。API 函數中用於參數的資料類型可以是下列其中之一

  • 純量:字串、數字、布林值、null

  • 清單

  • 字典:索引鍵為字串的索引鍵值組

  • 物件

清單參數通常會限制為包含預先定義資料類型的元素,例如字串清單,但可能會有支援不同資料類型項目的清單參數。

字典參數接受 索引鍵- 組,其中 索引鍵 是字串。通常預期與索引鍵相關聯的 具有預先定義的資料類型。但是,在某些情況下,相同的索引鍵可能支援不同的資料類型作為值。因此,字典參數可以是下列類型之一

  • 允許預先定義的索引鍵值組集合,在這種情況下,指定不在預先定義集合中的索引鍵會導致錯誤。

  • 不存在預先定義的索引鍵值組集合,字典接受任何索引鍵

換句話說,某些字典參數會指定哪些索引鍵是有效的。對於這些參數,嘗試使用該集合之外的索引鍵會導致錯誤。當不存在預先定義的值集合時,可以使用任何資料類型的任何值。沒有預先定義索引鍵清單的字典參數,只要索引鍵不在不同字典參數的預先定義集合中,就會接受任何索引鍵值組。

若要使用命令列整合來呼叫全域物件公開的 API 函數,而無需在 MySQL Shell 中啟動互動式工作階段,您必須以正確的方式提供所需的資料。這包括定義呼叫 API 函數的方式,以及如何將其參數從命令列引數對應到 API 引數。

重要事項

並非所有 MySQL Shell 函數都由命令列整合公開。例如,dba.getCluster() 等函數依賴於傳回物件,然後在進一步的操作中使用。命令列整合不會公開這類作業。

同樣地,MySQL Shell 命令列整合不支援以物件作為參數。任何具有物件類型參數的 API 函數都無法與命令列整合搭配使用。物件的存留期僅限於建立它的 MySQL Shell 調用存留期。由於 mysqlsh 在透過此 API 語法執行物件方法後會立即結束,因此從 API 呼叫接收或傳遞到 API 呼叫的任何物件都會立即超出範圍。在開發您想要使用命令列整合公開的 MySQL Shell 外掛程式時,應該考量到這一點。

從命令列呼叫 MySQL Shell API 函數的一般格式為

$ mysqlsh [shell options] -- [shell_object]+ object_function [anonymous_arguments|named arguments]*

其中

  • shell_object:指定具有公開供命令列使用的函數的全域物件。支援以空格分隔的清單中的巢狀物件。

  • object_function:指定應執行的最後一個 shell_object 的 API 函數。

  • [匿名引數|具名引數]*:指定傳遞至 object_function 呼叫的引數

對於大多數可用的 API,只需要單一物件,例如

$ mysqlsh -- shell status

但對於巢狀物件,必須指出物件的清單。例如,若要呼叫 shell.options 公開的函數 (例如 setPersist(optionName, value)),請使用語法

$ mysqlsh -- shell options set-persist defaultMode py

MySQL Shell 外掛程式中定義的巢狀物件可能會發生類似的情況。

您傳遞給函數的引數可以分為下列類型

  • 匿名引數:這是提供給命令的原始值。例如,在下列呼叫中,1onetrue 是匿名引數

    $ mysqlsh -- object command 1 one true
  • 具名引數:這是以 --索引鍵=值 形式提供的索引鍵值組。例如,在下列呼叫中,--sample--path 是具名引數

    $ mysqlsh -- object command 1 one true --sample=3 --path=some/path

考慮到引數的這種劃分,從命令列整合呼叫 API 函數的一般格式為

$ mysqlsh [shell options] -- object command [anonymous arguments][named arguments]

任何 匿名引數 的順序都很重要,因為它們會以位置方式處理。另一方面,具名引數 可以出現在任何位置,因為它們會先處理並與對應的參數相關聯。處理完具名引數後,會以位置方式處理匿名引數。