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 儲存桶的連線,或使用您使用 ociConfigFile
和 ociProfile
選項指定的替代詳細資訊。如需設定 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]
-
指定匯出資料檔案格式的一組欄位和行處理選項。您可以選取語法作為進一步自訂的基礎,方法是同時指定一或多個
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]
,
''
,
\
"
[LF]
,
''
false
\
csv-unix
[CR][LF]
[TAB]
''
,
\
注意\n
tsv
如同使用
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]
設定檔。-
ociAuth
: "string
" -
連線至 Oracle Cloud Infrastructure 時要使用的驗證方法。此選項需要將
osBucketName
設定為有效值。提供下列選項
-
api_key
:OCI 連線會使用 OCI 設定檔。請參閱 第 4.7.1 節,〈Oracle Cloud Infrastructure Object Storage〉。如果
osBucketName
是使用有效值定義的,但未定義ociAuth
,則會使用預設值api_key
。 -
instance_principal
:OCI 連線會使用執行個體主體驗證。請參閱 執行個體主體驗證。如果定義了
ociConfigFile
或ociProfile
,則無法使用此選項。 -
resource_principal
:OCI 連線會使用資源主體驗證。請參閱 資源主體驗證。如果定義了
ociConfigFile
或ociProfile
,則無法使用此選項。 security_token
:OCI 連線會使用暫時產生的階段作業權杖。請參閱 以階段作業權杖為基礎的驗證。
-
MySQL Shell 支援將表格匯出至與 S3 相容的儲存區,例如 Amazon Web Services (AWS) S3。
-
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: "
string
" 要用於連線的 s3 CLI 設定檔的設定檔名稱,而不是
default
設定檔。-
s3Region: "
string
" 要用於連線的區域名稱。
-
s3EndpointOverride: "
string
" -
要使用的端點 URL,而不是預設值。
連線至 Oracle Cloud Infrastructure S3 相容性 API 時,端點的格式如下:
https://
。將namespace
.compat.objectstorage.region
.oraclecloud.comnamespace
取代為 Object Storage 命名空間,並將region
取代為您的區域識別碼。例如,美國東部(阿什本)區域的區域識別碼為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"})