MySQL Shell 8.4  /  使用 MySQL Shell 命令  /  MySQL Shell 命令

3.1 MySQL Shell 命令

MySQL Shell 提供命令,讓您可以修改程式碼編輯器的執行環境,例如設定作用中的程式語言或 MySQL 伺服器連線。下表列出可用的命令,無論目前選取的語言為何。由於命令需要獨立於執行模式可用,因此它們以跳脫序列開始,即 \ 字元。

命令 別名/捷徑 描述

\help

\h\?

印出關於 MySQL Shell 的說明,或搜尋線上說明。

\quit

\q\exit

結束 MySQL Shell。

\

在 SQL 模式中,開始多行模式。程式碼會被快取,並在輸入空行時執行。

\status

\s

顯示目前的 MySQL Shell 狀態。

\js

將執行模式切換為 JavaScript。

\py

將執行模式切換為 Python。

\sql

將執行模式切換為 SQL。

\connect

\c

連線到 MySQL 執行個體。

\reconnect

重新連線到相同的 MySQL 執行個體。

\disconnect

中斷全域工作階段的連線。

\use

\u

指定要使用的綱要。

\source

\.source (無反斜線)

使用作用中的語言執行指令碼檔案。

\warnings

\W

顯示陳述式產生的任何警告。

\nowarnings

\w

不顯示陳述式產生的任何警告。

\history

檢視和編輯命令列歷程記錄。

\rehash

手動更新自動完成名稱快取。

\option

查詢和變更 MySQL Shell 設定選項。

\show

使用提供的選項和引數執行指定的報告。

\watch

使用提供的選項和引數執行指定的報告,並定期重新整理結果。

\edit

\e

在預設的系統編輯器中開啟命令,然後在 MySQL Shell 中呈現。

\pager

\P

設定 MySQL Shell 用來顯示文字的分頁器。

\nopager

停用任何已設定為 MySQL Shell 使用的分頁器。

\system

\!

執行指定的作業系統命令,並在 MySQL Shell 中顯示結果。

\query_attributes

可讓您為 SQL 查詢定義查詢屬性。MySQL Shell 功能與 MySQL 用戶端的功能相同。

Help 命令

\help 命令可以帶參數或不帶參數使用。當不帶參數使用時,會印出一般說明訊息,包括有關可用 MySQL Shell 命令、全域物件和主要說明類別的資訊。

當帶參數使用時,該參數會用於根據 MySQL Shell 目前執行的模式來搜尋可用的說明。參數可以是單字、命令、API 函數或 SQL 陳述式的一部分。存在以下類別

  • AdminAPI - 詳細說明 dba 全域物件和 AdminAPI,可讓您使用 InnoDB Cluster、InnoDB ClusterSet 和 InnoDB ReplicaSet。

  • X DevAPI - 詳細說明 mysqlx 模組以及 X DevAPI 的功能,可讓您將 MySQL 作為文件儲存區使用

  • Shell Commands - 提供有關可用的內建 MySQL Shell 命令的詳細資訊。

  • ShellAPI - 包含有關 shellutil 全域物件以及 mysql 模組的資訊,該模組可讓您在 MySQL 伺服器上執行 SQL。

  • SQL Syntax - 擷取 SQL 陳述式語法說明的進入點。

若要搜尋主題的說明 (例如 API 函數),請使用函數名稱作為 pattern。您可以使用萬用字元 ? 來比對任何單一字元,以及 * 來比對搜尋中的多個字元。萬用字元可以在模式中使用一次或多次。在搜尋說明時,也可以使用下列命名空間

  • dba 代表 AdminAPI

  • mysqlx 代表 X DevAPI

  • mysql 代表 ShellAPI (適用於傳統 MySQL 通訊協定)

  • shell 代表其他 ShellAPI 類別:ShellSysOptions

  • commands 代表 MySQL Shell 命令

  • cmdline 代表 mysqlsh 命令介面

例如,若要搜尋主題的說明,請發出 \help pattern

  • 使用 x devapi 來搜尋 X DevAPI 的說明

  • 使用 \c 來搜尋 MySQL Shell \connect 命令的說明

  • 使用 getClusterdba.getCluster 來搜尋 AdminAPI dba.getCluster() 作業的說明

  • 使用 Tablemysqlx.Table 來搜尋 X DevAPI Table 類別的說明

  • 當 MySQL Shell 在 JavaScript 模式中執行時,使用 isViewTable.isViewmysqlx.Table.isView 來搜尋 Table 物件的 isView 函數的說明

  • 當 MySQL Shell 在 Python 模式中執行時,使用 is_viewTable.is_viewmysqlx.Table.is_view 來搜尋 Table 物件的 isView 函數的說明

  • 當 MySQL Shell 在 SQL 模式中執行時,如果存在與 MySQL 伺服器的全域工作階段,則會顯示 SQL 說明。如需概觀,請使用 sql syntax 作為搜尋模式。

根據提供的搜尋模式,可能會找到一個或多個結果。如果只有一個說明主題在其標題中包含搜尋模式,則會顯示該說明主題。如果多個主題標題與模式相符,但其中一個是完全相符,則會顯示該說明主題,然後顯示標題中具有模式比對的其他主題清單。如果未識別到完全相符的項目,則會顯示標題中具有模式比對的主題清單。如果傳回主題清單,您可以從清單中選取要檢視的主題,方法是再次輸入命令,並使用符合相關主題標題的擴充搜尋模式。

連線、重新連線和中斷連線命令

\connect 命令用於連線到 MySQL 伺服器。請參閱第 4.3 節「MySQL Shell 連線」

例如

\connect root@localhost:3306

如果需要密碼,系統會提示您輸入。

使用 --mysqlx (--mx) 選項,使用 X 通訊協定建立工作階段,以連線到 MySQL 伺服器執行個體。例如

\connect --mysqlx root@localhost:33060

使用 --mysql (--mc) 選項建立 ClassicSession,讓您可以使用傳統 MySQL 通訊協定在伺服器上直接發出 SQL。例如

\connect --mysql root@localhost:3306

使用 --ssh 選項建立或重複使用 SSH 通道,提供與 MySQL 伺服器執行個體的加密連線。透過使用 SSH 通道從 MySQL Shell 建立的連線,不支援使用 AdminAPI 命令。請以 [user@]hostname[:port] 格式提供連線至 SSH 伺服器的 URI,然後提供 MySQL 執行個體 URI,例如

\connect --ssh root@198.51.100.4:2222 root@localhost:3306

當您使用 --ssh 選項時,必須在 MySQL 執行個體 URI 中指定連線至 MySQL 伺服器執行個體的連接埠。

使用 \connect 命令設定的 SSH 通道必須使用預設的 SSH 組態檔和身分檔案。如需設定這些檔案以及有關從 MySQL Shell 建立 SSH 通道連線的進一步資訊,請參閱第 4.3.6 節,「使用 SSH 通道」。您可以使用 shell.connect() 方法或在命令列上設定 SSH 通道,以取得額外的設定選項。一旦建立完成,無論最初使用何種設定方法,來自同一使用者、從同一執行個體連線至相同主機的連線之間,都可以共用 SSH 通道。

\reconnect 命令在指定時不帶任何參數或選項。如果與伺服器的連線中斷,您可以使用 \reconnect 命令,此命令會讓 MySQL Shell 嘗試使用現有的連線參數進行多次重新連線嘗試。如果這些嘗試不成功,您可以使用 \connect 命令並指定連線參數來建立新的連線。

\disconnect 命令在指定時也不帶任何參數或選項。此命令會將 MySQL Shell 的全域工作階段(由 session 全域物件表示的工作階段)與目前連線的 MySQL 伺服器執行個體中斷連線,以便您可以關閉連線,但仍然繼續使用 MySQL Shell。

如果與伺服器的連線中斷,您可以使用 \reconnect 命令,此命令會讓 MySQL Shell 嘗試使用現有的連線參數進行多次重新連線嘗試。如果這些嘗試不成功,您可以使用 \connect 命令並指定連線參數來建立新的連線。

狀態命令

\status 命令會顯示有關目前全域連線的資訊。這包括有關所連線伺服器、使用中的字元集、正常運行時間等等的資訊。

來源命令

\source 命令或其別名 \. 可在 MySQL Shell 的互動模式中使用,以執行給定路徑的指令碼檔案中的程式碼。例如:

\source /tmp/mydata.sql

您可以執行 SQL、JavaScript 或 Python 程式碼。檔案中的程式碼使用現用語言執行,因此若要處理 SQL 程式碼,MySQL Shell 必須處於 SQL 模式。

警告

由於程式碼是使用現用語言執行,因此在與目前選取的執行模式語言不同的語言中執行指令碼可能會導致意外的結果。

為了與 mysql 用戶端相容,僅在 SQL 模式中,您可以使用不帶反斜線和可選的 SQL 分隔符的 source 命令從指令碼檔案執行程式碼。 source 或別名 \. (不使用 SQL 分隔符)可以在 MySQL Shell 的 SQL 互動模式中使用,以直接執行指令碼,也可以在批次模式處理的 SQL 程式碼檔案中使用,以從檔案中執行其他指令碼。因此,在 SQL 模式下的 MySQL Shell 中,您現在可以使用以下三個命令中的任何一個,從互動模式或批次模式執行 /tmp/mydata.sql 檔案中的指令碼:

source /tmp/mydata.sql;
source /tmp/mydata.sql
\. /tmp/mydata.sql  

\source /tmp/mydata.sql 命令也是有效的,但僅在互動模式下有效。

在互動模式下,\source\.source 命令本身會新增至 MySQL Shell 歷程記錄,但所執行指令碼檔案的內容不會新增至歷程記錄。

使用命令

\use 命令可讓您選擇哪個綱要為現用,例如:

\use schema_name

\use 命令需要作用中的全域開發工作階段。 \use 命令會將目前的綱要設定為指定的 schema_name,並將 db 變數更新為表示所選綱要的物件。

歷程記錄命令

\history 命令會列出您先前在 MySQL Shell 中發出的命令。發出 \history 會以發出順序顯示歷程記錄項目,其中包含其歷程記錄項目編號,此編號可與 \history delete entry_number 命令搭配使用。

\history 命令提供以下選項:

  • 使用 \history save 手動儲存歷程記錄。

  • 使用 \history delete entrynumber 刪除具有給定編號的個別歷程記錄項目。

  • 使用 \history delete firstnumber-lastnumber 刪除給定項目編號範圍內的歷程記錄項目。如果 lastnumber 超過最後找到的歷程記錄項目編號,則會刪除歷程記錄項目,直到包括最後一個項目。

  • 使用 \history delete number- 刪除從 number 開始直到包括最後一個項目的歷程記錄項目。

  • 使用 \history delete -number 從最後一個項目開始並往回刪除指定數量的歷程記錄項目。例如,\history delete -10 會刪除最後 10 個歷程記錄項目。

  • 使用 \history clear 刪除整個歷程記錄。

歷程記錄預設不會在工作階段之間儲存,因此當您退出 MySQL Shell 時,目前工作階段期間發出的歷程記錄會遺失。如果您想要在工作階段之間保留歷程記錄,請啟用 MySQL Shell history.autoSave 選項。如需更多資訊,請參閱第 5.5 節,「程式碼歷程記錄」

重新雜湊命令

當您停用自動完成名稱快取功能時,請使用 \rehash 命令手動更新快取。例如,在您透過發出 \use schema 命令載入新的綱要之後,請發出 \rehash 來更新自動完成名稱快取。在此之後,自動完成會識別資料庫中使用的名稱,並且您可以自動完成諸如表格名稱之類的文字。請參閱第 5.3 節,「程式碼自動完成」

選項命令

\option 命令可讓您在所有模式下查詢和變更 MySQL Shell 組態選項。您可以使用 \option 命令列出已設定的組態選項,並顯示其值上次變更的方式。您也可以使用它來設定和取消設定選項,無論是針對工作階段,還是永久地在 MySQL Shell 組態檔案中設定。如需指示和組態選項的清單,請參閱第 13.4 節,「設定 MySQL Shell 選項」

分頁器命令

您可以設定 MySQL Shell 使用外部分頁器來讀取螢幕上較長的輸出,例如線上說明或 SQL 查詢的結果。請參閱第 4.6 節,「使用分頁器」

顯示和監看命令

\show 命令會執行指定的報表,該報表可以是內建的 MySQL Shell 報表,也可以是已在 MySQL Shell 中註冊的使用者定義報表。您可以指定命令的標準選項,以及報表支援的任何選項或其他引數。 \watch 命令執行報表的方式與 \show 命令相同,但會定期重新整理結果,直到您使用 Ctrl + C 取消命令為止。如需指示,請參閱第 10.1.5 節,「執行 MySQL Shell 報表」

編輯命令

\edit (\e) 命令會在預設系統編輯器中開啟命令以進行編輯,然後將編輯後的命令呈現在 MySQL Shell 中執行。也可以使用按鍵組合 Ctrl-X Ctrl-E 叫用此命令。如需詳細資訊,請參閱第 5.4 節,「編輯程式碼」

系統命令

\system (\!) 命令會執行您指定為命令引數的作業系統命令,然後在 MySQL Shell 中顯示命令的輸出。如果 MySQL Shell 無法執行命令,則會傳回錯誤。命令的輸出會以作業系統提供的形式傳回,並且不會由 MySQL Shell 的 JSON 包裝函數或您指定的任何外部分頁器工具處理以顯示輸出。

query_attributes 命令

query_attribute 命令和 session.setQueryAttributes 方法可讓您為 SQL 查詢定義查詢屬性。MySQL Shell 功能與 MySQL 用戶端的功能相同。

注意

設定查詢屬性僅在傳統 MySQL 通訊協定上受支援。X 通訊協定工作階段不支援此功能。

如需更多資訊,請參閱以下內容:

設定查詢屬性範例

以下範例會分別使用值 val1val2 設定屬性 att1att2

  • SQL

    SQL> \query_attributes att1 val1 att2 val2
  • JavaScript

    JS> session.setQueryAttributes({att1:"val1",att2:"val2"})
  • Python

    PY> session.set_query_attributes({att1:"val1",att2:"val2"})

擷取查詢屬性範例

可以使用 mysql_query_attribute_string() 函數擷取屬性。

例如

  • SQL

    SQL> select mysql_query_attribute_string("att1") as "Attribute 1", mysql_query_attribute_string("att2")as "Attribute 2"
         +-------------+-------------+
         | Attribute 1 | Attribute 2 |
         +-------------+-------------+
         | v1          | v2          |
         +-------------+-------------+
  • JavaScript

    JS> session.runSql("select mysql_query_attribute_string("att1") as "Attribute 1", mysql_query_attribute_string("att2")as "Attribute 2"')")
        +-------------+-------------+
        | Attribute 1 | Attribute 2 |
        +-------------+-------------+
        | v1          | v2          |
        +-------------+-------------+