匯入 SQL 檔案

如要從 SQL 指令的純文字指令碼重建資料庫,可以將儲存在 Cloud Storage bucket 的 SQL 檔案匯入 AlloyDB for PostgreSQL 叢集。

您可以取消將資料匯入 AlloyDB 叢集。詳情請參閱「取消匯入作業」。

匯入 SQL dump 檔案時,請確認建立 dump 的 PostgreSQL 版本與 AlloyDB 執行個體的 PostgreSQL 版本相容。如果從較高版本匯入 dump 檔案至較低版本,可能會因 SQL 語法不相容而失敗。

事前準備

開始匯入作業前:

  • 請確認資料庫有足夠的儲存空間配額。
  • 匯入作業會使用資料庫資源,但除非叢集佈建不足,否則不會干擾正常的資料庫作業。

匯入 AlloyDB 的必要角色和權限

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

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

  • storage.objectViewer IAM 角色
  • 自訂角色,包含下列權限:
    • storage.objects.get

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

將 SQL 檔案匯入 AlloyDB 叢集

如要使用 SQL 檔案將資料匯入 AlloyDB 叢集,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往叢集

  2. 按一下叢集名稱,開啟該叢集的「Overview」(總覽) 頁面。

  3. 按一下「匯入」。

  4. 在「檔案格式」部分,選取「SQL」。

  5. 在「Select source file」(選取來源檔案) 中,選擇要從電腦上傳檔案,還是從 Cloud Storage 位置選取檔案。

    1. 如要從電腦上傳檔案,請按照下列步驟操作:

      1. 選取「Upload files from your computer」(上傳電腦中的檔案)。
      2. 按一下「選取本機檔案」旁的「瀏覽」,從本機電腦選取 SQL 檔案。
      3. 按一下「選取 Cloud Storage 位置」旁的「瀏覽」,選取要儲存上傳本機檔案的 Cloud Storage 位置。
      4. 按一下「上傳」即可上傳檔案。
    2. 如要選取 Cloud Storage bucket 中的 SQL 檔案,請按照下列步驟操作:

      1. 選取「從 Google Cloud Storage 選取檔案」。
      2. 按一下「bucket-name/file-name」旁的「瀏覽」,從 Cloud Storage bucket 選取 SQL 檔案。
  6. 從「Database」(資料庫) 下拉式選單中,選取要匯入資料的資料庫。

    如果 SQL dump 檔案包含 \connect (或 \c) 中繼指令,則會覆寫您在 Google Cloud 控制台中選取的目標資料庫。

  7. 選用:如要指定匯入作業的使用者,請按一下「Show user options」(顯示使用者選項),然後在「User」(使用者) 欄位中輸入使用者名稱。

  8. 如要開始匯入作業,請按一下「匯入」。

gcloud

  1. 建立 Cloud Storage bucket。
  2. 將 SQL 檔案上傳至 bucket。如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

  3. 使用 gcloud storage buckets add-iam-policy-binding,將 bucket 的 storage.objectViewer IAM 角色授予 AlloyDB 叢集服務帳戶:

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

    如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。

  4. 匯入檔案:

    gcloud alloydb clusters import CLUSTER_NAME \
      --region=REGION \
      --database=DATABASE_NAME \
      --gcs-uri='gs://BUCKET_NAME/PATH_TO_SQL_FILE' \
      --user=USERNAME \
      --sql

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • REGION:部署 AlloyDB 叢集的區域。
    • DATABASE_NAME:叢集內資料庫的名稱。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_SQL_FILE:SQL 檔案的路徑。
    • USERNAME:匯入作業的使用者。

    如果指令傳回 PERMISSION_DENIED 等錯誤,請檢查權限。

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

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

REST v1

  1. 建立 Cloud Storage bucket。
  2. 將 SQL 檔案上傳至 bucket。如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。
  3. 使用 gcloud storage buckets add-iam-policy-binding,將 bucket 的 storage.objectViewer IAM 角色授予 AlloyDB 叢集服務帳戶。服務帳戶的格式如下:

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

    如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。

  4. 匯入 SQL 檔案。

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

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import

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

    • PROJECT_ID:專案 ID。
    • LOCATION_ID:部署 AlloyDB 叢集的區域。
    • CLUSTER_ID:叢集 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_SQL_FILE:SQL 檔案的路徑。
    • USER:用於匯入作業的使用者。
    • DATABASE_NAME:AlloyDB 叢集中的資料庫名稱。

    JSON 要求主體:

    {
       "gcsUri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE",
       "database": "DATABASE_NAME",
       "user": "USER",
       "sqlImportOptions": {}
    }
    

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

    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/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    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/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

    您會收到類似下方的 JSON 回覆:

    回應

    {
     "name": "projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2025-01-04T13:12:32.363393723Z",
      "target": "projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    

    如要使用其他使用者進行匯入,請指定使用者屬性。

  5. 如果不需要保留先前設定的 IAM 權限,請將其移除。

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

查看匯入作業的狀態

如要查看匯入作業的狀態,請按照下列步驟操作:

gcloud

使用 gcloud alloydb operations describe 指令執行下列操作:

gcloud alloydb operations describe OPERATION_ID --region=REGION

您也可以列出特定作業的詳細資料,或取消特定作業。如要進一步瞭解這個指令,請參閱 gcloud alloydb operations 指令參考頁面。

REST v1

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

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

詳情請參閱「get」。

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

  • REGION:部署 AlloyDB 叢集的區域。
  • PROJECT_ID:專案 ID。
  • OPERATION_ID:匯入作業的 ID。詳情請參閱「事前準備」。

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

curl (Linux、macOS 或 Cloud Shell)

執行下列指令:

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

PowerShell (Windows)

執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID" | Select-Object -Expand Content

如果成功,回應主體會包含 Operation 的執行個體。

後續步驟