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 組態檔案中的預設設定檔,或您使用 ociConfigFile
和 ociProfile
選項指定的其他詳細資料,與 Object Storage 儲存桶建立連線。如需設定 CLI 組態檔案的指示,請參閱 SDK 和 CLI 組態檔案。
-
其中:「
字串
」 -
用來篩選要匯出的資料的有效 SQL 條件運算式。
注意SQL 僅會在執行時進行驗證。如果您要匯出許多表格,任何與 SQL 語法相關的問題都只會在流程後期才會看到。因此,建議您在長時間執行的匯出流程中使用 SQL 條件之前先進行測試。
在下列範例中,
where
只會匯出表格sakila.actor
中actor_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]
-
指定匯出資料檔案格式的欄位和行處理選項。您可以選取指定的方言作為進一步自訂的基礎,同時也可指定一個或多個
linesTerminatedBy
、fieldsTerminatedBy
、fieldsEnclosedBy
、fieldsOptionallyEnclosed
和fieldsEscapedBy
選項來變更設定。預設方言會產生一個資料檔案,其內容與使用
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
\
注意不同方言的回車符和換行符值與作業系統無關。
如果您使用
linesTerminatedBy
、fieldsTerminatedBy
、fieldsEnclosedBy
、fieldsOptionallyEnclosed
和fieldsEscapedBy
選項,根據命令直譯器的跳脫慣例,如果您在選項值中使用反斜線字元 (\),則可能需要將其加倍。與使用
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
),還是僅在欄位具有字串資料類型(如CHAR
、BINARY
、TEXT
或ENUM
)時才括住 (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_client
、character_set_connection
和character_set_results
的工作階段值會針對每個連線設定為這個值。字元集必須在character_set_client
系統變數允許的範圍內,且必須是 MySQL 執行個體支援的字元集。
-
osBucketName: "
string
" 要寫入匯出資料檔案的 Oracle Cloud Infrastructure Object Storage 儲存貯體名稱。依預設,位於
~/.oci/config
的 Oracle Cloud Infrastructure CLI 組態檔案中的[DEFAULT]
設定檔會用來建立與儲存貯體的連線。您可以使用ociConfigFile
和ociProfile
選項,替換要用於連線的替代設定檔。如需設定 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]
設定檔。
MySQL Shell 支援將資料表匯出至與 S3 相容的儲存貯體,例如 Amazon Web Services (AWS) S3。
MySQL Shell 支援在命令列選項、環境變數和組態檔案中設定 AWS S3。命令列選項會覆寫環境變數、組態檔案和預設選項。
如需組態需求的相關資訊,請參閱 第 4.7 節〈雲端服務組態〉。
-
s3BucketName: "
string
" 要將匯出寫入的 S3 儲存貯體名稱。依預設,位於
~/.aws/
的config
和credentials
檔案的default
設定檔會用來建立與 S3 儲存貯體的連線。您可以使用s3ConfigFile
和s3CredentialsFile
選項,替換要用於連線的替代組態和憑證。如需安裝和設定 AWS CLI 的指示,請參閱 開始使用 AWS CLI。-
s3CredentialsFile:"
string
" 包含要用於連線的使用者憑證的憑證檔案,而非位於預設位置
~/.aws/credentials
的憑證檔案。通常,憑證檔案包含要用於連線的aws_access_key_id
和aws_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
.
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"})