MySQL Shell 提供全域物件,公開不同的功能,例如用於 InnoDB Cluster 和 InnoDB ReplicaSet 管理操作的 dba
、用於公用程式函數的 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 外掛程式中定義的巢狀物件也可能會發生類似情況。
您傳遞至函數的引數可以分為以下類型
-
匿名引數:傳遞至命令的原始值。例如,在下列呼叫中,
1
、one
和true
是匿名引數$ mysqlsh -- object command 1 one true
-
具名引數:以
--key=value
形式提供的鍵值對。例如,在下列呼叫中,--sample
和--path
是具名引數$ mysqlsh -- object command 1 one true --sample=3 --path=some/path
鑑於引數的這種區分,從命令列整合呼叫 API 函數的一般格式為
$ mysqlsh [shell options] -- object command [anonymous arguments][named arguments]
任何 匿名引數
的順序都很重要,因為它們是以位置方式處理的。另一方面,具名引數
可以出現在任何位置,因為它們會先處理並與對應的參數關聯。處理完具名引數後,會以位置方式處理匿名引數。