匯出 SQL 檔案

本頁說明如何將 PostgreSQL 適用的 AlloyDB 叢集資料匯出至 SQL 傾印檔案。

如要瞭解如何將整個資料庫從支援的資料庫伺服器遷移至新的 AlloyDB 執行個體,請參閱「使用資料庫遷移服務,將資料庫遷移至 AlloyDB」。如果您是為了從匯出檔案建立新執行個體而匯出,請考慮從儲存的備份還原叢集

您可以取消匯出 PostgreSQL 適用的 AlloyDB 叢集資料。詳情請參閱「取消匯出資料」。

事前準備

  • 開始匯出作業前,請注意匯出作業會使用資料庫資源,但除非執行個體資源不足,否則不會干擾標準資料庫作業。
  • 如果目標 bucket 與來源叢集位於不同區域,則需支付跨區域資料移轉費用。詳情請參閱 PostgreSQL 適用的 AlloyDB 定價
  • 如果物件名稱結尾為 .gz 擴充功能,系統就會啟用壓縮功能。接著,系統會以 .gz 格式將物件匯出至 Cloud Storage。
  • 多個匯出作業可以平行執行。

從 AlloyDB 匯出資料所需的角色和權限

如要將資料從 AlloyDB 匯出至 Cloud Storage,發起匯出的使用者必須具備下列其中一個身分與存取權管理 (IAM) 角色:

此外,AlloyDB 叢集的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin IAM 角色
  • 自訂角色,包括 storage.objects.create 權限

如需 IAM 角色相關說明,請參閱身分與存取權管理

將 AlloyDB 資料匯出至 SQL 傾印檔案

使用 AlloyDB 執行匯出作業時 (無論是透過 gcloud CLI 或 API),您會使用 pg_dump 公用程式,並搭配必要選項,確保產生的匯出檔案可有效匯回 AlloyDB。

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

gcloud

  1. 建立 Cloud Storage 值區
  2. 請使用提供的格式,找出要匯出專案的服務帳戶。服務帳戶的格式如下:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    授予服務帳戶 Cloud Storage 值區的權限,以進行匯出作業。

  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予服務帳戶。如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」。

  4. 將資料庫匯出至 Cloud Storage bucket。以下列出以 SQL 傾印格式匯出資料的選項:

    • --async (選用):立即傳回,不必等待進行中的作業完成。
    • --tables (選用):要匯出的資料表。
    • --schema-only (選用):如果設定這個參數,系統只會匯出結構定義。
    • --clean-target-objects (選用):如果設定此選項,系統會先輸出所有傾印的資料庫物件指令,再輸出建立這些物件的指令。DROP
    • --if-exist-target-objects (選用):如果已設定,請使用 DROP ... IF EXISTS 指令檢查物件是否存在,再將物件放入 --clean-target-objects 模式。

    如要使用這些功能,請在 gcloud 指令中加入下列選項。 如要只匯出物件定義 (結構定義),而不匯出資料,請使用 –-schema-only 旗標。如要指定要匯出的資料表,請使用 --tables=TABLE_NAMES 標記。您可以指定以半形逗號分隔的資料表名稱值或萬用字元模式,藉此指定多個資料表。

    否則,請從下列指令中移除這些參數:

    gcloud alloydb clusters export CLUSTER_NAME
      --region=REGION
      --database=DATABASE_NAME
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME"
      --tables=TABLE_NAMES
      --schema-only
      --clean-target-objects
      --if-exist-target-objects
      --sql

    alloydb clusters export 指令不含觸發條件或預存程序,但包含檢視區塊。如要匯出觸發程序或預存程序,請使用 pg_dump 公用程式。

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

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

REST v1

  1. 建立匯出的值區:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. 使用服務帳戶格式,找出要匯出專案的服務帳戶。

    服務帳戶的格式如下:

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    授予服務帳戶 Cloud Storage 值區的權限,以執行匯出作業。

  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予服務帳戶。如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」。

  4. 匯出資料庫。

    請使用下列 HTTP 方法和網址:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

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

    • PROJECT_ID:專案 ID。
    • REGION:部署 AlloyDB 叢集的區域。
    • CLUSTER_ID:叢集 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_SQL_FILE:SQL 傾印檔案的路徑。
    • DATABASE_NAME:AlloyDB 執行個體內的資料庫名稱。
    • TABLES:要匯出的資料表。
    • SCHEMA_ONLY:如果為 true,則只匯出結構定義。
    • CLEAN_TARGET_OBJECTS:如果 true,請先輸出所有傾印的資料庫物件指令,再輸出建立這些物件的指令。DROP
    • IF_EXIST_TARGET_OBJECTS:如果 true,請使用 DROP ... IF EXISTS 指令檢查物件是否存在,再以 clean_target_objects 模式放置物件。

    如要使用這些功能,請將這些參數的值設為 true。 否則,請將這些值設為 false。如要只匯出物件定義 (結構定義),而不匯出資料,請使用 schema_only 旗標。如要指定要匯出的資料表,請使用 tables 欄位。如要選取多個資料表,請提供以半形逗號分隔的資料表名稱清單,或在模式中寫入萬用字元。

    JSON 要求內文:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE"
      },
      "database": "DATABASE_NAME",
      "sql_export_options": {
        "schema_only": true,
        "tables": [
         "TABLE1",
         "TABLE2"
        ],
        "clean_target_objects": false,
        "if_exist_target_objects": true
      }
    }
    

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

    curl (Linux、macOS 或 Cloud Shell)

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
       

    PowerShell (Windows)

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }
    
       Invoke-WebRequest `
         -Method POST `
         -Headers $headers `
         -ContentType: "application/json; charset=utf-8" `
         -InFile request.json `
       -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
       

    您會收到類似以下的 JSON 回應:

    回應

    {
      "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
        "createTime": "2024-09-17T06:05:31.244428646Z",
        "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
        "verb": "export",
        "requestedCancellation": false,
        "apiVersion": "v1"
      },
      "done": false
    }
    
  5. 如果不需要保留先前設定的 IAM 角色,請立即移除。

如需要求的完整參數清單,請參閱 clusters:export

後續步驟