MySQL Shell 9.0  /  ...  /  命令列整合概觀

5.8.1 命令列整合概觀

本節提供命令列整合的概觀和一些基本用法範例。如需更詳細的資訊,請參閱第 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 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 節,「命令列說明」

MySQL Shell 命令列整合引數語法

arguments 清單為選用,且所有引數都必須遵循適用於命令列使用的語法,如本節所述。特殊字元 (例如空格或 \) 和引號會在傳遞至 MySQL Shell 之前由系統的 Shell (bashcmd 等) 處理。如果您不熟悉系統 Shell 如何在剖析命令時處理這些字元序列,則應盡量避免使用它們。例如,若要將帶有引號的參數作為參數的一部分傳遞,例如 list, of, names,則僅在命令列上使用該語法是不夠的。您需要使用系統的 Shell 語法來跳脫這些引號。如果您不這樣做,則 MySQL Shell 可能不會收到實際的引號。請參閱第 5.8.2.2 節,「定義引數」

引數清單中可以使用兩種引數類型:匿名引數和具名引數。匿名引數用於定義簡單類型參數,例如字串、數字、布林值、null。具名引數用於定義清單參數的值和字典參數中的選項,它們是鍵值組,其中值是簡單類型。它們的使用必須遵循以下模式

[positional_argument | named_argument]*

語法的所有部分都是選用的,並且可以依任何順序提供。然後,這些引數會轉換為傳遞至方法呼叫的引數,依以下順序

  • 來自清單的具名引數會使值附加到產生具名引數的清單參數

  • 來自字典的具名引數會使值新增至產生具名引數的字典參數

  • 如果存在沒有明確定義選項的字典參數,則會使其接受任何不屬於另一個清單或字典參數的具名引數

  • 提供給函式呼叫的任何剩餘引數都會依照提供的順序處理

MySQL Shell 命令列整合範例

使用命令列整合,呼叫 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);