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

5.8.1 命令列整合概觀

本節提供命令列整合的概觀以及一些基本的使用範例。如需更詳細的資訊,請參閱第 5.8.2 節「命令列整合詳細資訊」

以下內建的 MySQL Shell 全域物件可用

  • session:表示目前的全域工作階段。

  • db:表示全域工作階段的預設資料庫 (如果該工作階段是使用 X 通訊協定連線建立,且指定了預設資料庫)。請參閱將 MySQL 作為文件儲存

  • dba:提供對 AdminAPI 的存取權,用於管理 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet 部署。請參閱第 6 章「MySQL AdminAPI

  • cluster:表示 InnoDB Cluster。

  • clusterset:表示 InnoDB ClusterSet。

  • rs:表示 InnoDB ReplicaSet。

  • shell:提供對 MySQL Shell 函數的存取權,例如用於設定 MySQL Shell 選項的 shell.options (請參閱第 13.4 節「設定 MySQL Shell 選項」)。

  • util:提供對 MySQL Shell 公用程式的存取權。請參閱第 11 章「MySQL Shell 公用程式

如需更多資訊,請參閱第 4.5 節「MySQL Shell 全域物件」

MySQL Shell 命令列整合語法

重要

MySQL Shell 預設會讀取 MySQL Server 選項檔案和登入路徑。因此,如果您連線到使用選項檔案的 MySQL Server,預設會使用它,並嘗試使用該設定建立全域工作階段。如果您不想使用選項檔案,您必須在您的命令列中新增 --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 清單是選用的,並且所有引數都必須遵循本節中描述的適合命令列使用的語法。特殊字元 (例如空格或 \ ) 和引號會由您的系統 shell (bashcmd 等) 處理,然後再傳遞至 MySQL Shell。如果您不熟悉您的系統 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);