匯出 SQL 檔案

如要將資料庫結構定義和資料備份為 SQL 陳述式的純文字指令碼,可以將 AlloyDB for PostgreSQL 叢集的資料匯出至 Cloud Storage bucket 中的 SQL dump 檔案。

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

您可以取消從 AlloyDB for PostgreSQL 叢集匯出資料。詳情請參閱「取消匯出作業」。

事前準備

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

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

如要將 AlloyDB 的資料匯出至 Cloud Storage,發起匯出作業的使用者必須具備下列其中一個 Identity and Access Management (IAM) 角色:

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

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

如需 IAM 角色相關協助,請參閱「Identity and Access Management」。

將 AlloyDB 資料匯出至 SQL dump 檔案

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

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

gcloud

  1. 確認已有 Cloud Storage bucket 可儲存匯出的檔案,或建立新的 bucket。
  2. 使用 gcloud storage buckets add-iam-policy-binding,將 bucket 的 storage.objectAdmin IAM 角色授予 AlloyDB 服務帳戶。服務帳戶的格式如下:

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

    如需授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。

    如要將檔案匯出至非您建立的現有 Cloud Storage bucket,可能需要額外的 IAM 權限,才能授予 bucket 角色。詳情請參閱「必要的角色」。

  3. 將資料庫匯出至 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

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

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

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

REST v1

  1. 確認已有 Cloud Storage bucket 可儲存匯出的檔案,或建立新的 bucket:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. 使用 gcloud storage buckets add-iam-policy-binding,將 bucket 的 storage.objectAdmin IAM 角色授予 AlloyDB 服務帳戶。服務帳戶的格式如下:

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

    如需授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。

    如要將檔案匯出至現有的 Cloud Storage bucket,但該 bucket 並非由您建立,則可能需要額外的 IAM 權限,才能授予 bucket 角色。詳情請參閱「必要的角色」。

  3. 匯出資料庫。

    請使用下列 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 dump 檔案的路徑。
    • 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
    }
    
  4. 如果不需要保留先前設定的 IAM 角色,請將其移除。

如需完整的請求參數清單,請參閱 clusters.export。

後續步驟