本頁面說明如何將檔案平行匯出及匯入 Cloud SQL 執行個體。
事前準備
開始匯出或匯入作業前,請先完成下列事項:
- 確認資料庫有足夠的可用空間。
- 請遵循匯出及匯入資料的最佳做法。
- 完成匯入作業後,請驗證結果。
匯出和匯入作業會使用資料庫資源,但除非執行個體佈建不足,否則不會干擾一般資料庫作業。
從 PostgreSQL 適用的 Cloud SQL,平行匯出資料至多個檔案
下列各節說明如何從 PostgreSQL 適用的 Cloud SQL,平行匯出資料至多個檔案。
從 PostgreSQL 適用的 Cloud SQL 將資料平行匯出至多個檔案所需的角色和權限
如要將資料從 Cloud SQL 匯出至 Cloud Storage,發起匯出作業的使用者必須具備下列其中一個角色:
- Cloud SQL 編輯者角色
- 自訂角色,包含下列權限:
cloudsql.instances.getcloudsql.instances.export
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdminIdentity and Access Management (IAM) 角色- 自訂角色,包括下列權限:
storage.objects.createstorage.objects.list(僅適用於平行匯出檔案)storage.objects.delete(僅適用於平行匯出檔案)
如需 IAM 角色的相關協助,請參閱「Identity and Access Management」。
將資料平行匯出至多個檔案
您可以從 Cloud SQL 中的多個檔案,平行匯出資料至 Cloud Storage。gcloud sql export 函式搭配 -parallel 旗標,使用 pg_dump 公用程式搭配 --jobs 選項,從多個檔案匯出。
如果您打算將資料匯入 Cloud SQL,請按照「從外部資料庫伺服器匯出資料」一文的操作說明,確保檔案格式正確,可供 Cloud SQL 使用。
從 Cloud SQL 平行匯出的檔案會壓縮兩次。雖然您可以將這些檔案匯回 Cloud SQL,而不進行任何修改,但如果您想使用開放原始碼 pg_dump 公用程式將檔案匯入其他資料庫,則必須先解壓縮檔案。
gcloud
如要將 Cloud SQL 資料平行匯出至多個檔案,請完成下列步驟:
- 建立 Cloud Storage bucket。
- 如要找出要匯出檔案的 Cloud SQL 執行個體服務帳戶,請使用
gcloud sql instances describe指令。gcloud sql instances describe INSTANCE_NAME
- 如要將
storage.objectAdminIAM 角色授予服務帳戶,請使用gcloud storage buckets add-iam-policy-binding指令。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 如要將 Cloud SQL 中的資料平行匯出至多個檔案,請使用
gcloud sql export sql指令:gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \ --offload \ --parallel \ --threads=THREAD_NUMBER \ --database=DATABASE_NAME \ --table=TABLE_EXPRESSION
請依指示取代下列項目:
- INSTANCE_NAME:要平行匯出檔案的 Cloud SQL 執行個體名稱。
- BUCKET_NAME:Cloud Storage bucket 的名稱。
- BUCKET_PATH:儲存匯出檔案的值區路徑。
- FOLDER_NAME:儲存匯出檔案的資料夾。
- THREAD_NUMBER:Cloud SQL 用於平行匯出檔案的執行緒數量。舉例來說,如要同時匯出三個檔案,請將這個參數的值指定為
3。 - DATABASE_NAME (選用):Cloud SQL 執行個體中要匯出資料的資料庫名稱。如未指定資料庫,Cloud SQL 會從執行個體匯出所有使用者資料庫。詳情請參閱「匯出整個執行個體」
- TABLE_EXPRESSION:要從指定資料庫匯出的資料表。
匯出完成後,Cloud Storage bucket 中應該會有一個資料夾,其中包含
pg_dump目錄格式的檔案。 - 如果您不需要在「從 PostgreSQL 適用的 Cloud SQL 匯出資料所需的角色和權限」中設定的 IAM 角色,請撤銷該角色。
將 INSTANCE_NAME 替換為 Cloud SQL 執行個體名稱。
在輸出內容中,找出與 serviceAccountEmailAddress 欄位相關聯的值。
REST v1
如要將 Cloud SQL 資料平行匯出至多個檔案,請完成下列步驟:
- 建立 Cloud Storage bucket:
進行下列替換:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
my-bucket。 - PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您要建立的 Cloud Storage bucket。
- LOCATION_NAME:要儲存匯出檔案的 bucket 位置。例如:
us-east1。
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 -
將 Cloud SQL 資料平行匯出至多個檔案:
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您建立的 Cloud Storage bucket。
- INSTANCE_NAME:要平行匯出檔案的 Cloud SQL 執行個體名稱。
- BUCKET_NAME:Cloud Storage bucket 的名稱。
- BUCKET_PATH:儲存匯出檔案的值區路徑。
- FOLDER_NAME:儲存匯出檔案的資料夾。
- DATABASE_NAME:Cloud SQL 執行個體中要匯出資料的資料庫名稱。如要從執行個體匯出所有使用者資料庫,請從要求主體中移除這個欄位。
- THREAD_NUMBER:Cloud SQL 用於平行匯出檔案的執行緒數量。舉例來說,如要同時匯出三個檔案,請將這個參數的值指定為
3。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export
JSON 要求主體:
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlExportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
- 如果您不需要在「從 PostgreSQL 適用的 Cloud SQL 匯出資料所需的角色和權限」中設定的 IAM 角色,請撤銷該角色。
匯出完成後,Cloud Storage bucket 中應該會有一個資料夾,其中包含 pg_dump 目錄格式的檔案。
REST v1beta4
如要將 Cloud SQL 資料平行匯出至多個檔案,請完成下列步驟:
- 建立 Cloud Storage bucket:
進行下列替換:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
my-bucket。 - PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您要建立的 Cloud Storage bucket。
- LOCATION_NAME:要儲存匯出檔案的 bucket 位置。例如:
us-east1。
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 -
將 Cloud SQL 資料平行匯出至多個檔案:
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您建立的 Cloud Storage bucket。
- INSTANCE_NAME:要平行匯出檔案的 Cloud SQL 執行個體名稱。
- BUCKET_NAME:Cloud Storage bucket 的名稱。
- BUCKET_PATH:儲存匯出檔案的值區路徑。
- FOLDER_NAME:儲存匯出檔案的資料夾。
- DATABASE_NAME:Cloud SQL 執行個體中要匯出資料的資料庫名稱。如要從執行個體匯出所有使用者資料庫,請從要求主體中移除這個欄位。
- THREAD_NUMBER:Cloud SQL 用於平行匯出檔案的執行緒數量。舉例來說,如要同時匯出三個檔案,請將這個參數的值指定為
3。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export
JSON 要求主體:
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlExportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
- 如果您不需要在「從 PostgreSQL 適用的 Cloud SQL 匯出資料所需的角色和權限」中設定的 IAM 角色,請撤銷該角色。
匯出完成後,Cloud Storage bucket 中應會出現一個資料夾,內含 pg_dump 目錄格式的檔案。
匯出及匯入整個執行個體
您可以使用目錄格式的平行匯出功能,匯出或匯入整個執行個體中的所有使用者資料庫。
如要匯出或匯入整個執行個體,請使用「平行匯出」和「平行匯入」一節中顯示的相同指令,並分別移除 databases 或 database 欄位。如未指定資料庫,Cloud SQL 會對執行個體中的所有使用者資料庫執行平行匯出或匯入作業。這不包括系統資料庫和用於管理內部作業的 Cloud SQL 資料庫。
以目錄格式平行匯出至 Cloud Storage 時,匯出作業成功完成後,與各資料庫相關聯的資料會儲存在以各資料庫命名的子目錄中,如下所示:
gs://example-bucket/test-folder/ |---- postgres/ | |---- 3929.dat.gz (table data file) | |---- toc.dat (metadata file) | |---- second_database/ | |---- 3930.dat.gz | |---- 3931.dat.gz | |---- toc.dat
如要對整個執行個體執行平行匯入作業,且執行個體的檔案是在 Cloud SQL 外部建立,則必須採用這個子目錄結構,才能順利完成作業。
偵測到整個執行個體轉儲結構時,系統會忽略 API 中指定的匯入資料庫。這項作業會從目錄名稱偵測整個執行個體的結構。
您無法對其他檔案格式執行整個執行個體匯出或匯入作業。
您無法將整個執行個體匯出或匯入為單一 SQL 檔案或 CSV 檔案。
從多個檔案平行匯入資料至 PostgreSQL 適用的 Cloud SQL
下列各節說明如何將多個檔案中的資料平行匯入 PostgreSQL 適用的 Cloud SQL。
從多個檔案平行匯入資料至 PostgreSQL 適用的 Cloud SQL 時,所需的角色和權限
如要將 Cloud Storage 中的資料匯入 Cloud SQL,發起匯入作業的使用者必須具備下列其中一個角色:
- Cloud SQL 管理員角色
- 自訂角色,包含下列權限:
cloudsql.instances.getcloudsql.instances.import
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdminIAM 角色- 自訂角色,包括下列權限:
storage.objects.getstorage.objects.list(僅用於平行匯入檔案)
如需 IAM 角色的相關協助,請參閱「Identity and Access Management」。
將資料匯入 PostgreSQL 適用的 Cloud SQL
您可以從 Cloud Storage 中的多個檔案,平行匯入資料至資料庫。方法是使用 pg_restore 公用程式搭配 --jobs 選項。
gcloud
如要將多個檔案中的資料平行匯入 Cloud SQL,請完成下列步驟:
- 建立 Cloud Storage bucket。
將檔案上傳至 bucket。
如需將檔案上傳至 bucket 的說明,請參閱「從檔案上傳物件」。
- 如要找出要匯入檔案的 Cloud SQL 執行個體服務帳戶,請使用
gcloud sql instances describe指令。gcloud sql instances describe INSTANCE_NAME
- 如要將
storage.objectAdminIAM 角色授予服務帳戶,請使用gcloud storage buckets add-iam-policy-binding公用程式。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 如要將多個檔案中的資料平行匯入 Cloud SQL,請使用
gcloud sql import sql指令:gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \ --parallel \ --threads=THREAD_NUMBER \ --database=DATABASE_NAME
請依指示取代下列項目:
- INSTANCE_NAME:要平行匯入檔案的 Cloud SQL 執行個體名稱。
- BUCKET_NAME:Cloud Storage bucket 的名稱。
- BUCKET_PATH:儲存匯入檔案的值區路徑。
- FOLDER_NAME:儲存匯入檔案的資料夾。
- THREAD_NUMBER:Cloud SQL 用於平行匯入檔案的執行緒數量。舉例來說,如要同時匯入三個檔案,請將這個參數的值設為
3。 - DATABASE_NAME:Cloud SQL 執行個體中要匯入資料的資料庫名稱。您只能指定一個資料庫。
如果指令傳回
ERROR_RDBMS等錯誤,請檢查權限,因為這類錯誤通常是權限問題所致。 - 如果您不需要在「匯入 PostgreSQL 適用的 Cloud SQL 所需的角色和權限」中設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding移除這些權限。
將 INSTANCE_NAME 替換為 Cloud SQL 執行個體名稱。
在輸出內容中,找出與 serviceAccountEmailAddress 欄位相關聯的值。
REST v1
如要將多個檔案中的資料平行匯入 Cloud SQL,請完成下列步驟:
- 建立 Cloud Storage bucket:
進行下列替換:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
my-bucket。 - PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您要建立的 Cloud Storage bucket。
- LOCATION_NAME:要儲存匯入檔案的 bucket 位置。例如:
us-east1。
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
將檔案上傳至 bucket。
如需將檔案上傳至 bucket 的說明,請參閱「從檔案上傳物件」。
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 將多個檔案中的資料平行匯入 Cloud SQL:
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您建立的 Cloud Storage bucket。
- INSTANCE_NAME:要平行匯入檔案的 Cloud SQL 執行個體名稱。
- BUCKET_NAME:Cloud Storage bucket 的名稱。
- BUCKET_PATH:儲存匯入檔案的值區路徑。
- FOLDER_NAME:儲存匯入檔案的資料夾。
- DATABASE_NAME:Cloud SQL 執行個體中要匯入資料的資料庫名稱。您只能指定一個資料庫。
- THREAD_NUMBER:Cloud SQL 用於平行匯入檔案的執行緒數量。舉例來說,如要同時匯入三個檔案,請將這個參數的值設為
3。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import
JSON 要求主體:
{ "importContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlImportOptions": { "parallel": [TRUE|FALSE], "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
如要使用其他使用者進行匯入,請指定
如需要求參數的完整清單,請參閱「Cloud SQL Admin API」頁面。importContext.importUser屬性。- 如果您不需要在「匯入 PostgreSQL 適用的 Cloud SQL 所需的角色和權限」中設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding移除這些權限。
REST v1beta4
如要將多個檔案中的資料平行匯入 Cloud SQL,請完成下列步驟:
- 建立 Cloud Storage bucket:
進行下列替換:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
my-bucket。 - PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您要建立的 Cloud Storage bucket。
- LOCATION_NAME:要儲存匯入檔案的 bucket 位置。例如:
us-east1。
- BUCKET_NAME:bucket 名稱,須符合命名規定。例如:
將檔案上傳至 bucket。
如需將檔案上傳至 bucket 的說明,請參閱「從檔案上傳物件」。
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 將多個檔案中的資料平行匯入 Cloud SQL:
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_NAME: Cloud de Confiance by S3NS 專案的名稱,其中包含您建立的 Cloud Storage bucket。
- INSTANCE_NAME:要平行匯入檔案的 Cloud SQL 執行個體名稱。
- BUCKET_NAME:Cloud Storage bucket 的名稱。
- BUCKET_PATH:儲存匯入檔案的值區路徑。
- FOLDER_NAME:儲存匯入檔案的資料夾。
- DATABASE_NAME:Cloud SQL 執行個體中要匯入資料的資料庫名稱。您只能指定一個資料庫。
- THREAD_NUMBER:Cloud SQL 用於平行匯入檔案的執行緒數量。舉例來說,如要同時匯入三個檔案,請將這個參數的值設為
3。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import
JSON 要求主體:
{ "importContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlImportOptions": { "parallel": [TRUE|FALSE], "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
如要使用其他使用者進行匯入,請指定
如需要求參數的完整清單,請參閱「Cloud SQL Admin API」頁面。importContext.importUser屬性。- 如果您不需要在「將資料匯入 PostgreSQL 適用的 Cloud SQL 所需的角色和權限」中設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding移除這些權限。
限制
如果從多個檔案平行匯入或匯出資料時指定過多執行緒,可能會耗用超過 Cloud SQL 執行個體擁有的記憶體。如果發生這種情況,系統會顯示內部錯誤訊息。請檢查執行個體的記憶體用量,並視需要增加執行個體的大小。詳情請參閱「關於執行個體設定」。
執行匯出作業時,
databases或tables欄位中的資料庫名稱或資料表名稱不支援逗號。請確認您有足夠的磁碟空間,可下載初始 dump 檔案。否則會顯示
no space left on disk錯誤。如果執行個體只有一個虛擬 CPU (vCPU),就無法同時匯入或匯出多個檔案。執行個體的 vCPU 數量不得少於匯入或匯出作業使用的執行緒數量,且執行緒數量至少須為兩個。
多執行緒 (平行) 匯入和匯出與單一執行緒匯入和匯出不相容。舉例來說,單一執行緒匯出作業產生的 dump 檔案,只能由單一執行緒匯入作業匯入。同樣地,平行匯出作業產生的 dump 檔案只能透過平行匯入作業匯入。
pg_dump公用程式無法將您匯出的資料表分塊。因此,如果有一個非常大的資料表,可能會成為匯出作業速度的瓶頸。
後續步驟
- 瞭解如何檢查匯入與匯出作業的狀態。
- 瞭解如何取消匯入及匯出資料。
- 瞭解匯入及匯出資料的最佳做法。
- 瞭解匯入和匯出的已知問題。