如要將資料庫結構定義和資料備份為 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 管理員 (
roles/alloydb.admin) 角色 - 自訂角色,包含下列權限:
alloydb.clusters.getalloydb.clusters.export
此外,AlloyDB 叢集的服務帳戶必須具備下列其中一個 Cloud Storage bucket 角色:
storage.objectAdmin或storage.objectCreatorIAM 角色- 自訂角色,包括
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
- 確認已有 Cloud Storage bucket 可儲存匯出的檔案,或建立新的 bucket。
使用
gcloud storage buckets add-iam-policy-binding,將 bucket 的storage.objectAdminIAM 角色授予 AlloyDB 服務帳戶。服務帳戶的格式如下:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com如需授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。
如要將檔案匯出至非您建立的現有 Cloud Storage bucket,可能需要額外的 IAM 權限,才能授予 bucket 角色。詳情請參閱「必要的角色」。
將資料庫匯出至 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 \ --sqlgcloud alloydb clusters export指令不含觸發條件或預存程序,但包含檢視表。如要匯出觸發條件或預存程序,請使用pg_dump公用程式。如要進一步瞭解如何使用
gcloud alloydb clusters export指令,請參閱gcloud alloydb clusters export指令參考頁面。如果不需要保留先前設定的 IAM 角色,請撤銷該角色。
REST v1
確認已有 Cloud Storage bucket 可儲存匯出的檔案,或建立新的 bucket:
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME使用
gcloud storage buckets add-iam-policy-binding,將 bucket 的storage.objectAdminIAM 角色授予 AlloyDB 服務帳戶。服務帳戶的格式如下:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com如需授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。
如要將檔案匯出至現有的 Cloud Storage bucket,但該 bucket 並非由您建立,則可能需要額外的 IAM 權限,才能授予 bucket 角色。詳情請參閱「必要的角色」。
匯出資料庫。
請使用下列 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 }如果不需要保留先前設定的 IAM 角色,請將其移除。
如需完整的請求參數清單,請參閱 clusters.export。