使用 SQL 傾印檔案匯出及匯入

本頁面說明如何使用 SQL 傾印檔案,將資料匯出並匯入至 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 for MySQL 匯出至 SQL 傾印檔案

如要建立 SQL 傾印檔案,請將資料從 Cloud SQL 匯出至 Cloud Storage。檔案上傳至 Cloud Storage 後,您可以將檔案匯入其他 Cloud SQL 資料庫。如要直接在本機存取資料,您也可以將資料從 Cloud Storage 下載至本機環境。

從 Cloud SQL 匯出資料時,會使用 mysqldump 公用程式搭配 --single-transaction--hex-blob 選項。使用 --single-transaction 選項時,mysqldump 會在執行前啟動交易。這可讓 mysqldump 以目前狀態讀取資料庫,而非鎖定整個資料庫,進而產生一致的資料傾印。

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

如要將 Cloud SQL 執行個體資料庫中的資料匯出至 Cloud Storage 值區中的 SQL 傾印檔案,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [匯出]
  4. 在「檔案格式」部分,點選「SQL」即可建立 SQL 傾印檔案。
  5. 在「要匯出的資料」部分,按一下「這個執行個體中有一或多個資料庫」,即可匯出特定資料庫。
  6. 使用下拉式選單,選取要匯出的資料庫。
  7. 在「目的地」部分,選取「瀏覽」,即可搜尋匯出作業的 Cloud Storage 值區或資料夾。
  8. 按一下「Export」即可開始匯出。

gcloud

  1. 建立 Cloud Storage 值區
  2. 找出要匯出的 Cloud SQL 執行個體的服務帳戶。您可以執行 gcloud sql instances describe 指令來執行此操作。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予服務帳戶。如需設定身分與存取權管理權限的說明,請參閱「 使用身分與存取權管理權限」。
  4. 將資料庫匯出至 Cloud Storage 值區:
    gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \
    --database=DATABASE_NAME \
    --offload
      

    export sql 指令不包含觸發條件或已儲存的程序,但包含視圖。如要匯出觸發條件和/或預存程序,請使用 mysqldump 工具。

    如要進一步瞭解如何使用 export sql 指令,請參閱 sql export sql 指令參考資料頁面。

  5. 如果您不需要保留先前設定的 IAM 角色,請立即撤銷

REST v1

  1. 建立匯出的值區:
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 legacyBucketWriter IAM 角色。如需設定身分與存取權管理權限的相關說明,請參閱「使用身分與存取權管理權限」一文。
  3. 匯出資料庫:

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

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage 值區名稱
    • PATH_TO_DUMP_FILE:SQL 傾印檔案的路徑
    • DATABASE_NAME_1:Cloud SQL 執行個體內的資料庫名稱
    • DATABASE_NAME_2:Cloud SQL 執行個體內的資料庫名稱
  4. HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export

    JSON 要求主體:

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
          "databases": ["DATABASE_NAME"],
          "offload": TRUE | FALSE
        }
    }
    

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

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

  5. 如果您不需要保留先前設定的 IAM 角色,請立即予以移除。
如需此要求的完整參數清單,請參閱 instances:export 頁面。

REST v1beta4

  1. 建立匯出的值區:
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如需設定身分與存取權管理權限的相關說明,請參閱「使用身分與存取權管理權限」一文。
  3. 匯出資料庫:

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

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage 值區名稱
    • PATH_TO_DUMP_FILE:SQL 傾印檔案的路徑
    • DATABASE_NAME_1:Cloud SQL 執行個體內的資料庫名稱
    • DATABASE_NAME_2:Cloud SQL 執行個體內的資料庫名稱
  4. HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/export

    JSON 要求主體:

    {
      "exportContext":
        {
           "fileType": "SQL",
           "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
           "databases": ["DATABASE_NAME"],
           "offload": TRUE | FALSE
         }
     }
    

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

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

  5. 如果您不需要保留先前設定的 IAM 角色,請立即撤銷
如需此要求的完整參數清單,請參閱 instances:export 頁面。

使用 mysqldump 從本機 MySQL 伺服器匯出

如果您要從內部部署的 MySQL 資料庫匯出資料,以便匯入至 Cloud SQL 資料庫,則必須使用 mysqldump 公用程式搭配下列標記:

  • --databases 您必須使用 --databases 選項指定要匯出的明確資料庫清單,且這份清單「不得」包含 mysql 系統資料庫。
  • --hex-blob 如果資料庫包含任何二進位檔欄位,您必須使用此標記來確保正確匯入二進位檔欄位。
  • --set-gtid-purged=OFF GTID 資訊不得包含在 SQL 傾印檔案中,SQL 傾印檔案也不應停用二進位檔記錄。(MySQL 5.5 或外部複製不需要)。
  • --single-transaction 在執行前啟動交易。這麼做可讓 mysqldump 讀取目前狀態的資料庫,而非鎖定整個資料庫,進而產生一致的資料傾印。

在指令列中執行 mysqldump

mysqldump --databases DATABASE_NAME -h INSTANCE_IP -u USERNAME -p \
--hex-blob --single-transaction --set-gtid-purged=OFF \
--default-character-set=utf8mb4 > SQL_FILE.sql

如需 mysqldump 的說明,請參閱 mysqldump 參考資料

將外部資料複製到 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 角色的說明,請參閱「身分與存取權管理」。

將 SQL 傾印檔案匯入 MySQL 適用的 Cloud SQL

SQL 檔案是含有一系列 SQL 指令的純文字檔案。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下「匯入」
  4. 在「Choose the file you'd like to import data from」部分,輸入要用於匯入的 bucket 和 SQL 傾印檔案路徑,或瀏覽現有檔案。

    您可以匯入壓縮 (.gz) 或未壓縮 (.sql) 的檔案。

  5. 針對 [Format] (格式),選取 [SQL]
  6. 選取您要匯入資料的目標資料庫。

    這樣會使 Cloud SQL 在匯入之前執行 USE DATABASE 陳述式。

    中設定的資料庫。
  7. 如果您要指定使用者執行匯入作業,請選取使用者。

    如果您的匯入檔案包含必須由特定使用者執行的陳述式,請使用此欄位指定該使用者。

  8. 按一下 [Import] (匯入) 即可開始匯入。

gcloud

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

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

  3. 說明您要匯入的目標執行個體:
    gcloud sql instances describe INSTANCE_NAME
  4. 複製 serviceAccountEmailAddress 欄位。
  5. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予儲存桶的服務帳戶。
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:SERVICE-ACCOUNT \
      --role=roles/storage.objectAdmin
      
    如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」一文。
  6. 匯入資料庫:
    gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \
    --database=DATABASE_NAME

    如要瞭解如何使用 import sql 指令,請參閱 sql import sql 指令參考資料頁面。

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

  7. 如果您不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 將其移除。

REST v1

  1. 建立 SQL 傾印檔案。連結的操作說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。

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

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

  4. 為執行個體提供值區的 legacyBucketWriterobjectViewer IAM 角色。如需設定身分與存取權管理權限的說明,請參閱「使用身分與存取權管理權限」一文。
  5. 匯入傾印檔案:

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage 值區名稱
    • path_to_sql_file:SQL 檔案路徑
    • database_name:Cloud SQL 執行個體內的資料庫名稱

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

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

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

    如需要求的完整參數清單,請參閱 instances:import 頁面。
  6. 如果您不需要保留先前設定的 IAM 權限,請立即予以移除。

REST v1beta4

  1. 建立 SQL 傾印檔案。連結的操作說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。

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

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

  4. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如需設定身分與存取權管理權限的說明,請參閱「使用身分與存取權管理權限」。
  5. 匯入傾印檔案:

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage 值區名稱
    • path_to_sql_file:SQL 檔案路徑
    • database_name:Cloud SQL 執行個體內的資料庫名稱

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

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

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

    如需要求的完整參數清單,請參閱 instances:import 頁面。
  6. 如果您不需要保留先前設定的 IAM 權限,請立即予以移除。

後續步驟