MySQL Shell 8.4  /  MySQL Shell 公用程式  /  表格匯出工具

11.3 表格匯出工具

MySQL Shell 的表格匯出工具 util.exportTable() 會將 MySQL 關聯式表格匯出到資料檔案,無論是在本機伺服器上還是在 Oracle Cloud Infrastructure Object Storage 儲存桶中。然後可以使用 MySQL Shell 的平行表格匯入工具 util.importTable() 將資料上傳到目標 MySQL 伺服器上的表格(請參閱第 11.4 節,「平行表格匯入工具」),該工具使用平行連線來為大型資料檔案提供快速資料匯入。資料檔案也可以用來將資料匯入不同的應用程式,或是做為單一資料表格的輕量型邏輯備份。

關於公用程式

預設情況下,表格匯出工具會產生 MySQL Shell 平行表格匯入工具的預設格式資料檔案。預設選項可用於匯出 DOS 或 UNIX 系統的 CSV 檔案,以及 TSV 檔案。表格匯出工具無法產生 JSON 資料。您也可以如同 SELECT...INTO OUTFILE 陳述式一樣設定欄位和行處理選項,以建立任意格式的資料檔案。

util.exportTable() 可以搭配分割和子分割表格使用,但不會對這些表格執行任何特殊處理。無論發行版本為何,此工具每次都會為每個表格建立一個檔案。

在選擇表格匯出檔案的目的地時,請注意,若要匯入 HeatWave 服務資料庫系統,執行平行表格匯入工具的 MySQL Shell 執行個體必須安裝在有權存取 HeatWave 服務資料庫系統的 Oracle Cloud Infrastructure 計算執行個體上。如果您將表格匯出到 Object Storage 儲存桶中的檔案,則可以從計算執行個體存取 Object Storage 儲存桶。如果您在本機系統上建立表格匯出檔案,則需要使用您選擇的複製工具,將其傳輸到 Oracle Cloud Infrastructure 計算執行個體,具體取決於您為計算執行個體選擇的作業系統。

需求和限制

下列需求適用於使用表格匯出工具的匯出

  • 來源 MySQL 執行個體和目的地 MySQL 執行個體必須為 MySQL 5.7 或更新版本。

  • 用來將檔案傳輸到 Oracle Cloud Infrastructure Object Storage 儲存桶的上傳方法有 1.2 TiB 的檔案大小限制。

執行公用程式

表格匯出工具使用 MySQL Shell 全域工作階段取得要從中執行匯出的目標 MySQL 伺服器的連線詳細資料。您必須在執行公用程式之前開啟全域工作階段(可以有 X 通訊協定連線或傳統 MySQL 通訊協定連線)。此公用程式會為每個執行緒開啟自己的工作階段,從全域工作階段複製連線壓縮和 SSL 選項等選項,並且不再進一步使用全域工作階段。您可以限制資料傳輸的最大速率,以平衡網路上的負載。

在 MySQL Shell API 中,表格匯出工具是 util 全域物件的函式,並且具有下列簽名

util.exportTable(table, outputUrl[, options])

table 是要匯出到資料檔案的關聯式資料表格的名稱。表格名稱可以使用有效的綱要名稱限定,並在需要時以反引號字元括住。如果省略綱要,則使用 MySQL Shell 全域工作階段的作用中綱要。

options 是一個選項字典,如果為空,則可以省略。這些選項會列在本主題的最後一節中。

如果您要將資料匯出到本機檔案系統,則 outputUrl 是指定匯出資料檔案路徑和檔案名稱本身的字串,並具有適當的副檔名。您可以指定絕對路徑或相對於目前工作目錄的路徑。您可以使用 file:// 綱要為本機目錄路徑加上前置詞。在 MySQL Shell 的 JavaScript 模式中的這個範例中,使用者使用預設方言從 hr 綱要匯出 employees 表格。檔案會寫入使用者主目錄中的 exports 目錄,並獲得適用於此格式檔案的 .txt 副檔名

shell-js> util.exportTable("hr.employees", "file:///home/hanna/exports/employees.txt")

目標目錄必須在匯出發生之前存在,但不必為空。如果匯出的資料檔案已經存在,則會覆寫。對於匯出到本機目錄,會使用存取權限 rw-r----- (在支援這些權限的作業系統上)建立資料檔案。檔案的擁有者是執行 MySQL Shell 的使用者帳戶。

如果您要將資料匯出到 Oracle Cloud Infrastructure Object Storage 儲存桶或與 S3 相容的儲存空間,則 outputUrl 是儲存桶中資料檔案的名稱,包括適當的副檔名。您可以加入目錄分隔符號來模擬目錄結構。使用 osBucketName 選項來提供 Object Storage 儲存桶的名稱,並使用 osNamespace 選項來識別儲存桶的命名空間。在 MySQL Shell 的 Python 模式中的這個範例中,使用者會以 TSV 格式將 hr 綱要中的 employees 表格匯出到 Object Storage 儲存桶 hanna-bucket 中的檔案

shell-py> util.export_table("hr.employees", "dump/employees.tsv", {
        > dialect: "tsv", "osBucketName": "hanna-bucket", "osNamespace": "idx28w1ckztq" })

Object Storage 儲存桶的命名空間會顯示在 Oracle Cloud Infrastructure 主控台中儲存桶詳細資料頁面的 儲存桶資訊索引標籤中,或可以使用 Oracle Cloud Infrastructure 命令列介面取得。會使用預設 Oracle Cloud Infrastructure CLI 組態檔案中的預設設定檔,或您使用 ociConfigFileociProfile 選項指定的其他詳細資料,與 Object Storage 儲存桶建立連線。如需設定 CLI 組態檔案的指示,請參閱 SDK 和 CLI 組態檔案

選項

其中:「字串

用來篩選要匯出的資料的有效 SQL 條件運算式。

注意

SQL 僅會在執行時進行驗證。如果您要匯出許多表格,任何與 SQL 語法相關的問題都只會在流程後期才會看到。因此,建議您在長時間執行的匯出流程中使用 SQL 條件之前先進行測試。

在下列範例中,where 只會匯出表格 sakila.actoractor_id 的值大於 150 的那些列到名為 dump.csv 的檔案

              util.exportTable("sakila.actor", "dump.csv", {"where" : "actor_id > 150"})
partitions: ["字串","字串",..]

有效分割區名稱的清單,可將匯出限制在指定的分割區。

下列範例會將 schema.table 中的分割區 p1 和 p2 匯出到名為 dump.csv 的檔案

              util.exportTable("schema.table", "dump.csv", {"partitions" : ["p1", "p2"]}
dialect: [預設|csv|csv-unix|tsv]

指定匯出資料檔案格式的欄位和行處理選項。您可以選取指定的方言作為進一步自訂的基礎,同時也可指定一個或多個 linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy 選項來變更設定。

預設方言會產生一個資料檔案,其內容與使用 SELECT...INTO OUTFILE 陳述式及其預設設定所建立的檔案相同。 .txt 是適用於這些輸出檔案的副檔名。其他方言可用於匯出 DOS 或 UNIX 系統的 CSV 檔案 (.csv) 和 TSV 檔案 (.tsv)。

每個方言的套用設定如下:

表 11.1:資料表匯出工具的方言設定

方言

linesTerminatedBy

fieldsTerminatedBy

fieldsEnclosedBy

fieldsOptionallyEnclosed

fieldsEscapedBy

預設

[LF]

[TAB]

[空白]

false

\

csv

[CR][LF]

,

''

true

\

csv-unix

[LF]

,

''

false

\

tsv

[CR][LF]

[TAB]

''

true

\


注意
  1. 不同方言的回車符和換行符值與作業系統無關。

  2. 如果您使用 linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy 選項,根據命令直譯器的跳脫慣例,如果您在選項值中使用反斜線字元 (\),則可能需要將其加倍。

  3. 與使用 SELECT...INTO OUTFILE 陳述式的 MySQL 伺服器類似,MySQL Shell 不會驗證您指定的欄位和行處理選項。不準確地選擇這些選項可能會導致資料部分匯出或匯出不正確。在開始匯出之前務必驗證您的設定,並在之後驗證結果。

linesTerminatedBy: "characters"

一個或多個字元(或空字串),工具會使用這些字元來終止匯出資料檔案中的每一行。預設值與指定方言的預設值相同;如果省略方言選項,則預設值為換行符號 (\n)。此選項等同於 SELECT...INTO OUTFILE 陳述式的 LINES TERMINATED BY 選項。請注意,此工具不提供 SELECT...INTO OUTFILE 陳述式的 LINES STARTING BY 選項的等效選項,此選項設定為空字串。

fieldsTerminatedBy: "characters"

一個或多個字元(或空字串),工具會使用這些字元來終止匯出資料檔案中的每個欄位。預設值與指定方言的預設值相同;如果省略方言選項,則預設值為 Tab 字元 (\t)。此選項等同於 SELECT...INTO OUTFILE 陳述式的 FIELDS TERMINATED BY 選項。

fieldsEnclosedBy: "character"

單一字元(或空字串),工具會使用此字元將匯出資料檔案中的每個欄位括起來。預設值與指定方言的預設值相同;如果省略方言選項,則預設值為空字串。此選項等同於 SELECT...INTO OUTFILE 陳述式的 FIELDS ENCLOSED BY 選項。

fieldsOptionallyEnclosed: [ true | false ]

表示為 fieldsEnclosedBy 給定的字元是要括住匯出資料檔案中的所有欄位 (false),還是僅在欄位具有字串資料類型(如 CHARBINARYTEXTENUM)時才括住 (true)。預設值與指定方言的預設值相同;如果省略方言選項,則預設值為 false。此選項使 fieldsEnclosedBy 選項等同於 SELECT...INTO OUTFILE 陳述式的 FIELDS OPTIONALLY ENCLOSED BY 選項。

fieldsEscapedBy: "character"

用來開始匯出資料檔案中跳脫序列的字元。預設值與指定方言的預設值相同;如果省略方言選項,則預設值為反斜線 (\)。此選項等同於 SELECT...INTO OUTFILE 陳述式的 FIELDS ESCAPED BY 選項。如果將此選項設定為空字串,則不會跳脫任何字元,因此不建議這樣做,因為必須跳脫 SELECT...INTO OUTFILE 使用的特殊字元。

maxRate: "string"

每個執行緒在匯出期間,每秒資料讀取輸送量的最大位元組數。可以使用單位字尾 k 代表 KB、M 代表 MB 以及 G 代表 GB(例如,設定 100M 會將輸送量限制為每個執行緒每秒 100 MB)。設定 0(預設值),或將選項設定為空字串,表示未設定限制。

showProgress: [ true | false ]

顯示 (true) 或隱藏 (false) 匯出的進度資訊。如果 stdout 是終端機 (tty),例如 MySQL Shell 處於互動模式時,預設值為 true;否則為 false。進度資訊包括要匯出的估計總列數、目前已匯出的列數、完成百分比,以及每秒的列和位元組輸送量。

compression: "string;level=n"

寫入匯出資料檔案時使用的壓縮類型和壓縮層級。提供下列壓縮選項:

  • none:預設值。不套用任何壓縮。

  • gzip:使用 gzip 壓縮程式庫。壓縮層級可設定為 0 到 9。預設壓縮層級為 1。例如:

                      "compression": "gzip;level=4"
  • zstd:使用 zstd 壓縮程式庫。壓縮層級可設定為 1 到 22。預設壓縮層級為 1。例如:

                      "compression": "zstd;level=15"
defaultCharacterSet: "string"

MySQL Shell 開啟與伺服器的連線以進行匯出期間所使用的字元集。預設值為 utf8mb4。系統變數 character_set_clientcharacter_set_connectioncharacter_set_results 的工作階段值會針對每個連線設定為這個值。字元集必須在 character_set_client 系統變數允許的範圍內,且必須是 MySQL 執行個體支援的字元集。

OCI 雲端基礎架構的選項

osBucketName: "string"

要寫入匯出資料檔案的 Oracle Cloud Infrastructure Object Storage 儲存貯體名稱。依預設,位於 ~/.oci/config 的 Oracle Cloud Infrastructure CLI 組態檔案中的 [DEFAULT] 設定檔會用來建立與儲存貯體的連線。您可以使用 ociConfigFileociProfile 選項,替換要用於連線的替代設定檔。如需設定 CLI 組態檔案的指示,請參閱 SDK 和 CLI 組態檔案

osNamespace: "string"

osBucketName 指定的 Object Storage 儲存貯體所在的 Oracle Cloud Infrastructure 命名空間。Object Storage 儲存貯體的命名空間會顯示在 Oracle Cloud Infrastructure 主控台中儲存貯體詳細資訊頁面的「儲存貯體資訊」標籤中,或者可以使用 Oracle Cloud Infrastructure 命令列介面取得。

ociConfigFile: "string"

包含要用於連線之設定檔的 Oracle Cloud Infrastructure CLI 組態檔案,而非位於預設位置 ~/.oci/config 的組態檔案。

ociProfile: "string"

要用於連線的 Oracle Cloud Infrastructure 設定檔的設定檔名稱,而非用於連線的 Oracle Cloud Infrastructure CLI 組態檔案中的 [DEFAULT] 設定檔。

與 S3 相容的服務的選項

MySQL Shell 支援將資料表匯出至與 S3 相容的儲存貯體,例如 Amazon Web Services (AWS) S3。

注意

MySQL Shell 支援在命令列選項、環境變數和組態檔案中設定 AWS S3。命令列選項會覆寫環境變數、組態檔案和預設選項。

如需組態需求的相關資訊,請參閱 第 4.7 節〈雲端服務組態〉

s3BucketName: "string"

要將匯出寫入的 S3 儲存貯體名稱。依預設,位於 ~/.aws/configcredentials 檔案的 default 設定檔會用來建立與 S3 儲存貯體的連線。您可以使用 s3ConfigFiles3CredentialsFile 選項,替換要用於連線的替代組態和憑證。如需安裝和設定 AWS CLI 的指示,請參閱 開始使用 AWS CLI

s3CredentialsFile:"string"

包含要用於連線的使用者憑證的憑證檔案,而非位於預設位置 ~/.aws/credentials 的憑證檔案。通常,憑證檔案包含要用於連線的 aws_access_key_idaws_secret_access_key

s3ConfigFile: "string"

一個組態檔案,其中包含用於連線的設定檔,而不是預設位置中的設定檔,例如 ~/.aws/config。通常,組態檔案包含連線時要使用的區域和輸出類型。

s3Profile: "字串"

用於連線的 s3 CLI 設定檔名稱,而不是 default 設定檔。

s3Region: "字串"

用於連線的區域名稱。

s3EndpointOverride: "字串"

要使用的端點 URL,而不是預設端點。

當連線到 Oracle Cloud Infrastructure S3 相容性 API 時,端點採用以下格式: https://命名空間.compat.objectstorage.區域.oraclecloud.com。將 命名空間 替換為物件儲存命名空間,並將 區域 替換為您的區域識別碼。例如,美國東部 (阿什本) 區域的區域識別碼為 us-ashburn-1

對於美國東部(阿什本)區域中名為 axaxnpcrorw5 的命名空間

https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com.

Microsoft Azure Blob Storage 的選項

MySQL Shell 支援匯出至 Microsoft Azure Blob Storage。

注意

MySQL Shell 支援在命令列選項、環境變數和組態檔案中設定 Microsoft Azure Blob Storage。命令列選項會覆寫環境變數和組態檔案。

如需組態需求和組態類型優先順序的資訊,請參閱第 4.7 節,〈雲端服務組態〉

azureContainerName: "字串"

必要。要將匯出寫入的 Azure 容器名稱。容器必須存在。

azureConfigFile: "字串"

選用。一個組態檔案,其中包含儲存連線參數,而不是預設位置中的組態檔案,例如 ~/.azure/config。如果未定義此檔案,則會使用預設組態檔案。

azureContainerName 必須定義且不得為空。

azureStorageAccount: "字串"

選用。用於作業的 Azure 儲存帳戶名稱。

azureStorageSasToken: "字串"

選用。用於作業驗證的 Azure 共用存取簽章 (SAS) 權杖,而不是金鑰。

在以下範例中,組態使用連線參數的組態字串,這表示 exportTable 命令只需要 azureContainerName

範例 config 檔案

        [cloud]
         name = AzureCloud

        [storage]
         connection_string=alphanumericConnectionString

範例 exportTable 命令,將 sakila.actor 表格以 TSV 檔案格式匯出到名為 mysqlshellazure 的容器

        util.exportTable("sakila.actor", "actor.tsv", {dialect: "tsv", azureContainerName: "mysqlshellazure"})