本頁說明如何使用 SQL 傾印檔案,將資料匯出及匯入 Cloud SQL 執行個體。
事前準備
匯出作業會使用資料庫資源,但除非執行個體資源不足,否則不會干擾正常的資料庫作業。
如需最佳做法,請參閱匯入及匯出資料的最佳做法。
完成匯入作業後,請驗證結果。
從 PostgreSQL 適用的 Cloud SQL 匯出資料
從 PostgreSQL 適用的 Cloud SQL 匯出資料時所需的角色和權限
如要將資料從 Cloud SQL 匯出至 Cloud Storage,發起匯出作業的使用者必須具備下列其中一個角色:
- Cloud SQL 編輯者角色
- 自訂角色,包括下列權限:
cloudsql.instances.get
cloudsql.instances.export
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdmin
身分與存取權管理 (IAM) 角色- 自訂角色,包括下列權限:
storage.objects.create
storage.objects.list
(僅適用於平行匯出檔案)storage.objects.delete
(僅適用於平行匯出檔案)
如需 IAM 角色的相關說明,請參閱「身分與存取權管理」。
從 PostgreSQL 適用的 Cloud SQL 匯出至 SQL 傾印檔案
使用 Cloud SQL 執行匯出作業時 (無論是透過Google Cloud 控制台、gcloud CLI 或 API),您都會使用pg_dump
公用程式,並搭配必要選項,確保產生的匯出檔案可有效匯回 Cloud SQL。
如果您打算將資料匯入 Cloud SQL,請務必按照從外部資料庫伺服器匯出資料中的操作說明,確保 SQL 傾印檔案的格式符合 Cloud SQL 規定。
如要將 Cloud SQL 執行個體資料庫中的資料匯出至 Cloud Storage 值區的 SQL 傾印檔案,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下 [匯出]。
- 在「檔案格式」部分,按一下「SQL」即可建立 SQL 傾印檔案。
- 在「要匯出的資料」部分,使用下拉式選單選取要匯出的資料庫。
- 在「目的地」部分,選取「瀏覽」,搜尋匯出作業的 Cloud Storage 值區或資料夾。
- 按一下「匯出」即可開始匯出。
- 建立 Cloud Storage 值區。
- 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。執行
gcloud sql instances describe
指令即可完成這項操作。在輸出內容中尋找serviceAccountEmailAddress
欄位。gcloud sql instances describe
INSTANCE_NAME - 使用
gcloud storage buckets add-iam-policy-binding
將storage.objectAdmin
IAM 角色授予服務帳戶。如需設定 IAM 權限的說明,請參閱「 使用 IAM 權限」。 - 將資料庫匯出至 Cloud Storage bucket:
gcloud sql export sql
INSTANCE_NAME gs://BUCKET_NAME /sqldumpfile.gz \ --database=DATABASE_NAME \ --offloadexport sql
指令不含觸發條件或預存程序,但包含檢視畫面。 如要匯出觸發程序和/或預存程序,請使用 pg_dump 工具。如要進一步瞭解如何使用
export sql
指令,請參閱sql export sql
指令參考資料頁面。 - 如果您不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
- 建立匯出的值區:
gcloud storage buckets create gs://
BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME 這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供值區的
legacyBucketWriter
IAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 匯出資料庫:
<
使用任何要求資料之前,請先替換以下項目:
- 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 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/
PROJECT_ID /instances/INSTANCE_ID /exportJSON 要求主體:
{ "exportContext": { "fileType": "SQL", "uri": "gs://
BUCKET_NAME /PATH_TO_DUMP_FILE ", "databases": ["DATABASE_NAME "], "offload":TRUE |FALSE , "sqlExportOptions": { "clean": [TRUE |FALSE ], "ifExists": [TRUE |FALSE ] } } }如要傳送要求,請展開以下其中一個選項:
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://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_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://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /export" | Select-Object -Expand Content您應該會收到如下的 JSON 回應:
回應
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/
PROJECT_ID /instances/TARGET_INSTANCE_ID ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "OPERATION_ID ", "targetId": "INSTANCE_ID ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID ", "targetProject": "PROJECT_ID " } - 如果您不需要保留先前設定的 IAM 角色,請立即移除。
- 建立匯出的值區:
gcloud storage buckets create gs://
BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME 這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 匯出資料庫:
<
使用任何要求資料之前,請先替換以下項目:
- 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 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/
PROJECT_ID /instances/INSTANCE_ID /exportJSON 要求主體:
{ "exportContext": { "fileType": "SQL", "uri": "gs://
BUCKET_NAME /PATH_TO_DUMP_FILE ", "databases": ["DATABASE_NAME "], "offload":TRUE |FALSE , "sqlExportOptions": { "clean": [TRUE |FALSE ], "ifExists": [TRUE |FALSE ] } } }如要傳送要求,請展開以下其中一個選項:
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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /export" | Select-Object -Expand Content您應該會收到如下的 JSON 回應:
回應
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/
PROJECT_ID /instances/TARGET_INSTANCE_ID ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "OPERATION_ID ", "targetId": "INSTANCE_ID ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID ", "targetProject": "PROJECT_ID " } - 如果您不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
將資料匯入 PostgreSQL 適用的 Cloud SQL
匯入 PostgreSQL 適用的 Cloud SQL 時所需的角色和權限
如要將資料從 Cloud Storage 匯入 Cloud SQL,發起匯入作業的使用者必須具備下列其中一個角色:
- Cloud SQL 管理員角色
- 自訂角色,包括下列權限:
cloudsql.instances.get
cloudsql.instances.import
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdmin
IAM 角色- 自訂角色,包括下列權限:
storage.objects.get
storage.objects.list
(僅限平行匯入檔案)
如需 IAM 角色的相關說明,請參閱「身分與存取權管理」。
將 SQL 傾印檔案匯入 PostgreSQL 適用的 Cloud SQL
SQL 檔案是含有一系列 SQL 指令的純文字檔案。
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下「匯入」。
- 在「選擇要從哪個檔案匯入資料」部分,輸入要用於匯入作業的 bucket 和 SQL 傾印檔案路徑,或瀏覽至現有檔案。
您可以匯入壓縮 (
.gz
) 或未壓縮 (.sql
) 的檔案。 - 針對 [Format] (格式),選取 [SQL]。
選取您要匯入資料的目標資料庫。
這樣會使 Cloud SQL 在匯入之前執行
USE DATABASE
陳述式。如要指定使用者執行匯入作業,請選取使用者。
如果匯入檔案包含必須由特定使用者執行的陳述式,請使用此欄位指定該使用者。
- 按一下 [Import] (匯入) 即可開始匯入。
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 說明您要匯入的目標執行個體:
gcloud sql instances describe
INSTANCE_NAME - 複製
serviceAccountEmailAddress
欄位。 - 使用
gcloud storage buckets add-iam-policy-binding
將storage.objectAdmin
IAM 角色授予 bucket 的服務帳戶。 如需設定 IAM 權限的說明,請參閱「使用 IAM 權限」。gcloud storage buckets add-iam-policy-binding gs://
BUCKET_NAME \ --member=serviceAccount:SERVICE-ACCOUNT \ --role=roles/storage.objectAdmin - 匯入資料庫:
gcloud sql import sql
INSTANCE_NAME gs://BUCKET_NAME /IMPORT_FILE_NAME \ --database=DATABASE_NAME 如要瞭解如何使用
import sql
指令,請參閱sql import sql
指令參考資料頁面。如果指令傳回類似
ERROR_RDBMS
的錯誤,請重新檢視權限,因為這個錯誤通常是因權限問題所致。 - 如果您不需要保留先前設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding
移除這些權限。
-
建立 SQL 傾印檔案。連結的操作說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。
- 如果您要從地端 PostgreSQL 伺服器匯入資料:
- 按照「使用 pg_dump 匯出資料」中的操作說明,建立 SQL 傾印檔案。
- 按照「建立 bucket」一文中的操作說明,在 Cloud Storage 中建立 bucket。
- 使用「上傳物件」一文中的程序,將 SQL 傾印檔案上傳至 Cloud Storage bucket。
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
legacyBucketWriter
和objectViewer
IAM 角色。如需設定 IAM 權限的說明,請參閱使用 IAM 權限一文。 - 匯入傾印檔案:
<0x0A
使用任何要求資料之前,請先替換以下項目:
- 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 /importJSON 要求主體:
{ "importContext": { "fileType": "SQL", "uri": "gs://
bucket_name /path_to_sql_file ", "database": "database_name " } }如要傳送要求,請展開以下其中一個選項:
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://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-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://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /import" | Select-Object -Expand Content您應該會收到如下的 JSON 回應:
回應
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/
project-id /instances/target-instance-id ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "operation-id ", "targetId": "instance-id ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ", "targetProject": "project-id " }如要使用不同的使用者匯入,請指定
如需此要求的完整參數清單,請參閱執行個體:匯入頁面。importContext.importUser
屬性。 - 如果您不需要保留先前設定的 IAM 權限,請立即予以移除。
-
建立 SQL 傾印檔案。連結的操作說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。
- 如果您要從地端 PostgreSQL 伺服器匯入資料:
- 按照「使用 pg_dump 匯出資料」中的操作說明,建立 SQL 傾印檔案。
- 按照「建立 bucket」一文中的操作說明,在 Cloud Storage 中建立 bucket。
- 使用「上傳物件」一文中的程序,將 SQL 傾印檔案上傳至 Cloud Storage bucket。
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如需設定 IAM 權限的說明,請參閱使用 IAM 權限一文。 - 匯入傾印檔案:
<0x0A
使用任何要求資料之前,請先替換以下項目:
- 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 /importJSON 要求主體:
{ "importContext": { "fileType": "SQL", "uri": "gs://
bucket_name /path_to_sql_file ", "database": "database_name " } }如要傳送要求,請展開以下其中一個選項:
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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /import" | Select-Object -Expand Content您應該會收到如下的 JSON 回應:
回應
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/
project-id /instances/target-instance-id ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "operation-id ", "targetId": "instance-id ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ", "targetProject": "project-id " }如要使用不同的使用者匯入,請指定
如需此要求的完整參數清單,請參閱執行個體:匯入頁面。importContext.importUser
屬性。 - 如果您不需要保留先前設定的 IAM 權限,請立即予以移除。
後續步驟
- 瞭解如何檢查匯入與匯出作業的狀態。
- 進一步瞭解匯入及匯出資料的最佳做法。
- 進一步瞭解 Cloud Storage。
- 匯入及匯出作業的已知問題。