並行匯出及匯入檔案

本頁面說明如何並行匯出及匯入 Cloud SQL 執行個體中的檔案。

事前準備

開始匯出或匯入作業前:

  • 請確認資料庫有足夠的可用空間。
  • 匯出和匯入作業會使用資料庫資源,但除非執行個體未充分配置,否則不會干擾一般資料庫作業。

  • 請遵循匯出及匯入資料的最佳做法
  • 完成匯入作業後,請驗證結果。

並行從 MySQL 適用的 Cloud SQL 匯出資料至多個檔案

以下各節將說明如何從 MySQL 適用的 Cloud SQL 平行匯出多個檔案的資料。

從 MySQL 適用的 Cloud SQL 並行匯出資料至多個檔案所需的角色和權限

如要將資料從 Cloud SQL 匯出至 Cloud Storage,啟動匯出作業的使用者必須具備下列其中一個角色:

此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin Identity and Access Management (IAM) 角色
  • 自訂角色,包括下列權限:
    • storage.objects.create
    • storage.objects.list (僅限平行匯出檔案)
    • storage.objects.delete (僅限平行匯出檔案)

如需有關 IAM 角色的說明,請參閱「身分與存取權管理」。

並行將資料匯出至多個檔案

您可以並行從 Cloud SQL 匯出多個檔案中的資料至 Cloud Storage。方法是使用 dumpInstance 公用程式。

檔案上傳至 Cloud Storage 後,您可以將檔案匯入其他 Cloud SQL 資料庫。如果您想在本機存取檔案中的資料,請將資料從 Cloud Storage 下載至本機環境。

如果檔案包含 DEFINER 子句 (視圖、觸發條件、stored_procedures 等),則視這些陳述式執行的順序而定,使用這些檔案匯入資料可能會失敗。進一步瞭解 DEFINER 用法,以及 Cloud SQL 中的潛在解決方法。

gcloud

如要平行匯出 Cloud SQL 中的資料至多個檔案,請完成下列步驟:

  1. 建立 Cloud Storage 值區
  2. 如要找出要匯出檔案的 Cloud SQL 執行個體服務帳戶,請使用
    gcloud sql instances describe 指令。
    gcloud sql instances describe INSTANCE_NAME
  3. INSTANCE_NAME 改成 Cloud SQL 執行個體的名稱。

    在輸出內容中,找出與 serviceAccountEmailAddress 欄位相關聯的值。

  4. 如要將 storage.objectAdmin 身分與存取權管理角色授予服務帳戶,請使用 gcloud storage buckets add-iam-policy-binding 指令。如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」一文。
  5. 如要並行從 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_PATH:匯出檔案儲存的 bucket 路徑。
    • FOLDER_NAME:匯出檔案的儲存資料夾。
    • THREAD_NUMBER:Cloud SQL 用於平行匯出檔案的執行緒數。舉例來說,如果您想一次並行匯出三個檔案,請將 3 指定為此參數的值。
    • DATABASE_NAME (選用):Cloud SQL 執行個體內的資料庫名稱,匯出作業會從這裡執行。如果您未指定任何資料庫,Cloud SQL 會匯出執行個體的所有資料庫。
    • TABLE_EXPRESSION:從指定資料庫匯出的資料表。

    export sql 指令不含觸發條件或預存程序,但包含視圖。如要匯出觸發事件或儲存程序,請使用單一執行緒進行匯出。這個執行緒使用 mysqldump 工具。

    匯出完成後,Cloud Storage 值區的資料夾中應會出現 MySQL Shell 傾印格式的檔案。

  6. 如果您不需要在「從 Cloud SQL for MySQL 匯出資料所需的角色和權限」一文中設定的 IAM 角色,請撤銷該角色。

REST v1

如要平行匯出 Cloud SQL 中的資料至多個檔案,請完成下列步驟:

  1. 建立 Cloud Storage 值區:
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    
    請進行下列替換:
    • BUCKET_NAME:值區名稱,必須遵守命名規定。例如:my-bucket
    • PROJECT_NAME:包含您要建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • LOCATION_NAME:您要儲存匯出檔案的值區位置。例如:us-east1
  2. 為執行個體提供值區的 legacyBucketWriter IAM 角色。如需設定身分與存取權管理權限的相關說明,請參閱「使用身分與存取權管理權限」一文。
  3. 並行從 Cloud SQL 匯出資料至多個檔案:

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_NAME:包含您建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • INSTANCE_NAME:要並行匯出檔案的 Cloud SQL 執行個體名稱。
    • BUCKET_NAME:Cloud Storage 值區的名稱。
    • BUCKET_PATH:匯出檔案儲存的 bucket 路徑。
    • FOLDER_NAME:匯出檔案的儲存資料夾。
    • DATABASE_NAME (選用):Cloud SQL 執行個體內的資料庫名稱,匯出作業會從這裡執行。如果您未指定任何資料庫,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 回應:

  4. 匯出完成後,Cloud Storage 值區的資料夾中應會出現 MySQL Shell 傾印格式的檔案。

  5. 如果您不需要在「從 Cloud SQL for MySQL 匯出資料所需的角色和權限」一文中設定的 IAM 角色,請撤銷該角色。
如需此要求的完整參數清單,請參閱 Cloud SQL Administration API 頁面。

REST v1beta4

如要平行匯出 Cloud SQL 中的資料至多個檔案,請完成下列步驟:

  1. 建立 Cloud Storage 值區:
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    請進行下列替換:
    • BUCKET_NAME:值區名稱,必須遵守命名規定。例如:my-bucket
    • PROJECT_NAME:包含您要建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • LOCATION_NAME:您要儲存匯出檔案的值區位置。例如:us-east1
  2. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如需設定身分與存取權管理權限的相關說明,請參閱「使用身分與存取權管理權限」一文。
  3. 並行從 Cloud SQL 匯出資料至多個檔案:

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_NAME:包含您建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • INSTANCE_NAME:要並行匯出檔案的 Cloud SQL 執行個體名稱。
    • BUCKET_NAME:Cloud Storage 值區的名稱。
    • BUCKET_PATH:匯出檔案儲存的 bucket 路徑。
    • FOLDER_NAME:匯出檔案的儲存資料夾。
    • DATABASE_NAME (選用):Cloud SQL 執行個體內的資料庫名稱,匯出作業會從這裡執行。如果您未指定任何資料庫,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 回應:

  4. 匯出完成後,Cloud Storage 值區的資料夾中應會出現 MySQL Shell 傾印格式的檔案。

  5. 如果您不需要在「從 Cloud SQL for MySQL 匯出資料所需的角色和權限」一文中設定的 IAM 角色,請撤銷該角色。
如需此要求的完整參數清單,請參閱 Cloud SQL Administration API 頁面。

並行匯入多個檔案中的資料至 MySQL 適用的 Cloud SQL

以下各節說明如何從多個檔案平行匯入資料至 MySQL 適用的 Cloud SQL。

從多個檔案並行匯入 MySQL 適用的 Cloud SQL 資料庫所需的角色和權限

如要將資料從 Cloud Storage 匯入至 Cloud SQL,啟動匯入作業的使用者必須具備下列其中一個角色:

此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin IAM 角色
  • 自訂角色,包括下列權限:
    • storage.objects.get
    • storage.objects.list (僅限平行匯入檔案)

如需有關 IAM 角色的說明,請參閱「身分與存取權管理」。

將資料匯入 MySQL 適用的 Cloud SQL

您可以從位於 Cloud Storage 的多個檔案,平行匯入資料至資料庫。方法是使用 loadDump 公用程式。

gcloud

如要將多個檔案的資料平行匯入至 Cloud SQL,請完成下列步驟:

  1. 建立 Cloud Storage 值區
  2. 將檔案上傳至值區。

    如需將檔案上傳至值區的說明,請參閱「從檔案上傳物件」。

  3. 如要找出要匯入檔案的 Cloud SQL 執行個體的服務帳戶,請使用
    gcloud sql instances describe 指令。
    gcloud sql instances describe INSTANCE_NAME
  4. INSTANCE_NAME 改成 Cloud SQL 執行個體的名稱。

    在輸出內容中,找出與 serviceAccountEmailAddress 欄位相關聯的值。

  5. 如要將 storage.objectAdmin 身分與存取權管理角色授予服務帳戶,請使用 gcloud storage buckets add-iam-policy-binding 公用程式。如需設定 IAM 權限的說明,請參閱「使用身分與存取權管理權限」。
  6. 如要將多個檔案的資料平行匯入至 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_PATH:匯入檔案儲存的 bucket 路徑。
    • FOLDER_NAME:匯入檔案的儲存資料夾。
    • THREAD_NUMBER:Cloud SQL 用於並行匯入檔案的執行緒數。舉例來說,如果您想一次並行匯入三個檔案,請將 3 指定為此參數的值。
    • DATABASE_NAME (選用):Cloud SQL 執行個體內資料庫的名稱,匯入作業會從這裡開始。如果您未指定任何資料庫,Cloud SQL 會為執行個體匯入所有資料庫。

    如果指令傳回類似 ERROR_RDBMS 的錯誤,請重新檢視權限,因為這個錯誤通常是因權限問題所致。

  7. 如果您不需要在「匯入 MySQL 適用的 Cloud SQL 所需的角色和權限」中設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 將其移除。

REST v1

如要將多個檔案的資料平行匯入至 Cloud SQL,請完成下列步驟:

  1. 建立 Cloud Storage 值區:
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    
    請進行下列替換:
    • BUCKET_NAME:值區名稱,必須遵守命名規定。例如:my-bucket
    • PROJECT_NAME:包含您要建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • LOCATION_NAME:您要儲存匯入檔案的值區位置。例如:us-east1
  2. 將檔案上傳至值區。

    如需將檔案上傳至值區的說明,請參閱「從檔案上傳物件」。

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」。
  4. 將多個檔案的資料平行匯入至 Cloud SQL:

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_NAME:包含您建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • INSTANCE_NAME:您要並行匯入檔案的 Cloud SQL 執行個體名稱。
    • BUCKET_NAME:Cloud Storage 值區的名稱。
    • BUCKET_PATH:匯入檔案儲存的 bucket 路徑。
    • FOLDER_NAME:匯入檔案的儲存資料夾。
    • DATABASE_NAME (選用):Cloud SQL 執行個體內的資料庫名稱,匯入作業會從這裡執行。如果您未指定任何資料庫,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],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    
    

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    如需要求的完整參數清單,請參閱 Cloud SQL Admin API 頁面。
  5. 如果您不需要在「匯入 MySQL 適用的 Cloud SQL 時所需的角色和權限」中設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 將這些權限移除。

REST v1beta4

如要將多個檔案的資料平行匯入至 Cloud SQL,請完成下列步驟:

  1. 建立 Cloud Storage 值區:
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    
    請進行下列替換:
    • BUCKET_NAME:值區名稱,必須遵守命名規定。例如:my-bucket
    • PROJECT_NAME:包含您要建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • LOCATION_NAME:您要儲存匯入檔案的值區位置。例如:us-east1
  2. 將檔案上傳至值區。

    如需將檔案上傳至值區的說明,請參閱「從檔案上傳物件」。

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」。
  4. 將多個檔案的資料平行匯入至 Cloud SQL:

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_NAME:包含您建立的 Cloud Storage 值區的 Google Cloud 專案名稱。
    • INSTANCE_NAME:您要並行匯入檔案的 Cloud SQL 執行個體名稱。
    • BUCKET_NAME:Cloud Storage 值區的名稱。
    • BUCKET_PATH:匯入檔案儲存的 bucket 路徑。
    • FOLDER_NAME:匯入檔案的儲存資料夾。
    • DATABASE_NAME (選用):Cloud SQL 執行個體內的資料庫名稱,匯入作業會從這裡執行。如果您未指定任何資料庫,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],
             "threads": [THREAD_NUMBER]
            }
        }
     }
     
    

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    如需要求的完整參數清單,請參閱 Cloud SQL Admin API 頁面。
  5. 如果您不需要在「匯入 MySQL 適用的 Cloud SQL 所需的角色和權限」中設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 將其移除。

限制

  • 如果您在平行匯入或匯出多個檔案的資料時,指定太多執行緒,可能會使用比 Cloud SQL 執行個體更多記憶體。如果發生這種情況,系統會顯示內部錯誤訊息。檢查執行個體的記憶體用量,並視需要增加執行個體的大小。詳情請參閱「關於執行個體設定」。

  • 執行匯出作業時,系統不支援 databasestables 欄位中資料庫名稱或資料表名稱中的逗號。

  • 請確認磁碟空間足以下載初始傾印檔案。否則會顯示 no space left on disk 錯誤。

  • 如果執行個體只有一個虛擬 CPU (vCPU),則無法並行匯入或匯出多個檔案。執行個體的 vCPU 數量不得少於用於匯入或匯出作業的執行緒數量,且執行緒數量至少須為 2。

  • 如果您在匯出作業期間編寫資料定義語言 (DDL) 陳述式,例如 CREATEDROPALTER,則作業可能會失敗,或匯出的資料可能與時間點復原快照不一致。

  • 如果匯入作業失敗,則可能會剩下部分匯入的資料。MySQL 會自動提交 DDL 陳述式。如果發生這種情況,請先清理 DDL 陳述式和資料,再重新匯入資料。

  • 與單一資料庫並行匯入作業類似,在為整個執行個體執行並行匯入作業之前,請先確認所有資料庫都已完成建立。

後續步驟