本節提供命令列整合的概觀和一些基本用法範例。如需更詳細的資訊,請參閱第 5.8.2 節, 「命令列整合詳細資訊」。
下列內建的 MySQL Shell 全域物件可用
session
:表示目前的全域工作階段。db
:表示全域工作階段的預設資料庫,如果該工作階段是使用指定預設資料庫的 X Protocol 連線建立的。請參閱將 MySQL 作為文件儲存區使用。dba
:提供對 AdminAPI 的存取權,用於管理 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet 部署。請參閱第 6 章,MySQL AdminAPI。cluster
:表示 InnoDB Cluster。clusterset
:表示 InnoDB ClusterSet。rs
:表示 InnoDB ReplicaSet。shell
:提供對 MySQL Shell 函式的存取權,例如shell.options
用於設定 MySQL Shell 選項 (請參閱第 13.4 節,「設定 MySQL Shell 選項」)。util
:提供對 MySQL Shell 公用程式的存取權。請參閱第 11 章,MySQL Shell 公用程式。
如需更多資訊,請參閱第 4.5 節,「MySQL Shell 全域物件」。
MySQL Shell 預設會讀取 MySQL 伺服器選項檔案和登入路徑。因此,如果您連線到使用選項檔案的 MySQL 伺服器,預設會使用該選項檔案,並嘗試使用該設定建立全域工作階段。如果您不想使用選項檔案,則必須將 --no-defaults
新增至您的命令列。
您透過啟動 mysqlsh 應用程式並傳入特殊 --
選項來存取命令列整合。當您以這種方式啟動 MySQL Shell 時,--
表示選項清單的結尾 (例如要連線的伺服器、要使用的語言等等),其後的所有內容都會傳遞至命令列整合。命令列整合支援特定的語法,此語法基於 MySQL Shell 互動式介面中使用的物件和方法。若要使用命令列整合語法執行作業,請在終端機中發出
mysqlsh [options] -- [shell_object]+ object_method [arguments]
語法元素為
shell_object
是一個字串,會對應至 MySQL Shell 全域物件。命令列整合支援巢狀物件。若要呼叫巢狀物件中的函式,請提供以空格分隔的階層結構中的物件清單,以到達所需的物件。object_method
是最後一個shell_object
提供的方法名稱。方法名稱可以依照 JavaScript 或 Python 命名慣例提供,也可以依照替代的命令列整合友善格式提供,其中所有已知函式都使用小寫字母,且單字之間以連字號分隔。object_method
的名稱會自動從標準 JavaScript 樣式的 camelCase 名稱轉換,其中所有大小寫變更都會以-
取代,並轉換為小寫。例如,createCluster
會變成create-cluster
。arguments
是在呼叫object_method
時傳遞給它的引數。
shell_object
必須符合公開的全域物件之一,且任何巢狀物件都必須是清單中先前物件的子物件。object_method
必須符合清單中最後一個物件的方法之一,並且必須以其中一種有效的格式 (JavaScript、Python 或命令列友善) 定義。如果它們不對應至有效的物件及其方法,MySQL Shell 會以狀態 10 結束。
請參閱MySQL Shell 命令列整合範例中的範例。
若要找出命令列整合中可用的物件和方法,最好查詢您正在使用的 MySQL Shell。這是因為除了 MySQL Shell 隨附的標準物件之外,也可能會公開外掛程式的其他物件。
若要取得命令列整合支援的物件清單
$ mysqlsh -- --help
這會顯示物件清單和物件提供的簡短說明。
若要取得 object
的命令列整合中可用的函式清單
$ mysqlsh -- object --help
如需更多資訊,請參閱第 5.8.2.4 節,「命令列說明」。
arguments
清單為選用,且所有引數都必須遵循適用於命令列使用的語法,如本節所述。特殊字元 (例如空格或 \) 和引號會在傳遞至 MySQL Shell 之前由系統的 Shell (bash、cmd 等) 處理。如果您不熟悉系統 Shell 如何在剖析命令時處理這些字元序列,則應盡量避免使用它們。例如,若要將帶有引號的參數作為參數的一部分傳遞,例如 「list, of, names」,則僅在命令列上使用該語法是不夠的。您需要使用系統的 Shell 語法來跳脫這些引號。如果您不這樣做,則 MySQL Shell 可能不會收到實際的引號。請參閱第 5.8.2.2 節,「定義引數」。
引數清單中可以使用兩種引數類型:匿名引數和具名引數。匿名引數用於定義簡單類型參數,例如字串、數字、布林值、null。具名引數用於定義清單參數的值和字典參數中的選項,它們是鍵值組,其中值是簡單類型。它們的使用必須遵循以下模式
[positional_argument | named_argument]*
語法的所有部分都是選用的,並且可以依任何順序提供。然後,這些引數會轉換為傳遞至方法呼叫的引數,依以下順序
來自清單的具名引數會使值附加到產生具名引數的清單參數
來自字典的具名引數會使值新增至產生具名引數的字典參數
如果存在沒有明確定義選項的字典參數,則會使其接受任何不屬於另一個清單或字典參數的具名引數
提供給函式呼叫的任何剩餘引數都會依照提供的順序處理
使用命令列整合,呼叫 MySQL Shell API 函式比使用 --execute
選項更容易且不那麼麻煩。以下範例示範如何使用此功能
-
檢查伺服器執行個體是否適合升級,並以 JSON 格式傳回結果以供進一步處理
$ mysqlsh -- util check-for-server-upgrade --user=root --host=localhost --port=3301 --password='password' --outputFormat=JSON --config-path=/etc/mysql/my.cnf
在 MySQL Shell 互動模式中的等效指令
mysql-js> util.checkForServerUpgrade({user:'root', host:'localhost', port:3301}, {password:'password', outputFormat:'JSON', configPath:'/etc/mysql/my.cnf'})
-
部署一個 InnoDB Cluster 沙箱執行個體,監聽 1234 埠並指定連線時使用的密碼
$ mysqlsh -- dba deploy-sandbox-instance 1234 --password=password
在 MySQL Shell 互動模式中的等效指令
mysql-js> dba.deploySandboxInstance(1234, {password: password})
-
使用監聽 1234 埠的沙箱執行個體建立一個 InnoDB Cluster,並指定名稱為
mycluster
$ mysqlsh root@localhost:1234 -- dba create-cluster mycluster
在 MySQL Shell 互動模式中的等效指令
mysql-js> dba.createCluster('mycluster')
-
使用監聽 1234 埠的沙箱執行個體檢查 InnoDB Cluster 的狀態
$ mysqlsh root@localhost:1234 -- cluster status
在 MySQL Shell 互動模式中的等效指令
mysql-js> cluster.status()
-
設定 MySQL Shell 開啟指令歷史記錄功能
$ mysqlsh -- shell options set_persist history.autoSave true
在 MySQL Shell 互動模式中的等效指令
mysql-js> shell.options.set_persist('history.autoSave', true);