MySQL Shell 9.0  /  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 Service DB 系統,您執行平行資料表匯入工具的 MySQL Shell 執行個體必須安裝在具有 HeatWave Service DB 系統存取權的 Oracle Cloud Infrastructure Compute 執行個體上。如果您將資料表匯出至 Object Storage 儲存桶中的檔案,則可以從 Compute 執行個體存取 Object Storage 儲存桶。如果您在本機系統上建立資料表匯出檔案,則需要使用您選擇的複製工具將其傳輸至 Oracle Cloud Infrastructure Compute 執行個體,具體取決於您為 Compute 執行個體選擇的作業系統。

需求與限制

下列需求適用於使用資料表匯出工具進行的匯出

  • 來源 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 組態檔中的預設設定檔建立與 Object Storage 儲存桶的連線,或使用您使用 ociConfigFileociProfile 選項指定的替代詳細資訊。如需設定 CLI 組態檔的指示,請參閱 SDK 和 CLI 組態檔

選項

其中:「string

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

注意

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

在下列範例中,where 只會將 sakila.actor 資料表中 actor_id 值大於 150 的資料列,匯出至名為 dump.csv 的檔案

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

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

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

              util.exportTable("schema.table", "dump.csv", {"partitions" : ["p1", "p2"]}
dialect: [default|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]

,

''

,

\

"

[LF]

,

''

false

\

csv-unix

[CR][LF]

[TAB]

''

,

\


注意
  1. \n

  2. tsv

  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] 設定檔。

ociAuth: "string"

連線至 Oracle Cloud Infrastructure 時要使用的驗證方法。此選項需要將 osBucketName 設定為有效值。

提供下列選項

與 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: "string"

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

s3Region: "string"

要用於連線的區域名稱。

s3EndpointOverride: "string"

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

連線至 Oracle Cloud Infrastructure S3 相容性 API 時,端點的格式如下:https://namespace.compat.objectstorage.region.oraclecloud.com。將 namespace 取代為 Object Storage 命名空間,並將 region 取代為您的區域識別碼。例如,美國東部(阿什本)區域的區域識別碼為 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"})