本頁面說明如何使用 BAK 檔案將資料匯出及匯入至 Cloud SQL 執行個體,以及如何使用交易記錄檔案將資料匯入至 Cloud SQL 執行個體。
事前準備
匯出作業會使用資料庫資源,但除非執行個體的資源不足,否則不會干擾正常的資料庫作業。
如需最佳做法,請參閱「匯入及匯出資料的最佳做法」。
完成匯入作業後,請驗證結果。
從 Cloud SQL for SQL Server 匯出資料
Cloud SQL 支援匯出內建 BAK 檔案。
如果您想從匯出的檔案建立新的執行個體,請考慮 從備份還原至不同的執行個體,或是複製執行個體。
在匯出作業期間,Cloud SQL 會針對所選資料庫執行完整備份。
從 SQL Server 適用的 Cloud SQL 匯出資料所需的角色和權限
如要將資料從 Cloud SQL 匯出至 Cloud Storage,啟動匯出作業的使用者必須具備下列其中一個角色:
- Cloud SQL 編輯者角色
- 自訂角色,包括下列權限:
cloudsql.instances.get
cloudsql.instances.export
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdmin
Identity and Access Management (IAM) 角色- 自訂角色,包括下列權限:
storage.objects.create
storage.objects.list
(用於條紋匯出和交易記錄匯出)storage.objects.delete
(用於條紋匯出和交易記錄匯出)storage.buckets.get
(僅限交易記錄匯出)
如需有關 IAM 角色的說明,請參閱「身分與存取權管理」。
將資料從 SQL Server 適用的 Cloud SQL 匯出至 BAK 檔案
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下 [匯出]。
- 在「檔案格式」部分中,按一下「BAK」。
- 在「要匯出的資料」部分,使用下拉式選單選取要匯出的資料庫。
- 在「目的地」部分,選取「瀏覽」,即可搜尋匯出作業的 Cloud Storage 值區或資料夾。
- 按一下「Export」即可開始匯出。
gcloud
- 建立 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 權限」。 - 匯出資料庫:
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FILENAME \ --database=DATABASE_NAME
如要瞭解如何使用
gcloud sql export bak
指令,請參閱 指令參考資料頁面。 - 如果您不需要保留先前設定的 IAM 角色,請立即撤銷。
REST v1
-
建立 Cloud Storage 值區來匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_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/export
JSON 要求主體:
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即予以移除。
REST v1beta4
-
建立 Cloud Storage 值區,用於匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_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/export
JSON 要求主體:
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即撤銷。
匯出差異資料庫備份
匯出差異資料庫備份前,您必須匯出差異資料庫。
如果其他服務或功能 (例如時間點復原和唯讀備用資源) 在完整備份匯出和差異備份匯出之間觸發完整備份,則必須再次觸發完整備份匯出作業。
請參考以下範例,進一步瞭解這項功能:
- 您在早上 7 點提出完整備份要求。
- 您在早上 9 點啟用時間點復原功能,這會觸發執行個體的完整備份作業。
- 假設您在下午 5 點嘗試進行差異備份,由於上次完整備份是由指定時間點復原功能觸發,因此這項匯出要求會失敗並顯示錯誤訊息。
Cloud SQL 不支援在備用資源執行個體上使用 --differential-base
或 --bak-type=DIFF
的資料庫匯出要求。
gcloud
- 建立 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 權限」。 將資料庫匯出為差異基底。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \ --database=DATABASE_NAME --differential-base
如要瞭解如何使用
gcloud sql export bak
指令,請參閱 指令參考資料頁面。匯出差異備份。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=DIFF
如要瞭解如何使用
gcloud sql export bak
指令,請參閱 指令參考資料頁面。- 如果您不需要保留先前設定的 IAM 角色,請立即撤銷。
REST v1
-
建立 Cloud Storage 值區來匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供值區的
legacyBucketWriter
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。 - 將完整的資料庫備份匯出為差異鹼基。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage 值區名稱
- PATH_TO_BAK_FILE:SQL BAK 檔案的路徑
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱
offload
:如要啟用及使用無伺服器匯出功能,請將這個值設為 TRUE
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "databases": ["DATABASE_NAME"] "offload": TRUE | FALSE "bakExportOptions": { "differentialBase":true } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 匯出差異備份。
使用任何要求資料之前,請先替換以下項目:
- 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 執行個體內的資料庫名稱
- offload:啟用無伺服器匯出功能。將其設為
true
即可使用無伺服器匯出功能。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false "bakExportOptions": { bakType:"DIFF" } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即予以移除。
REST v1beta4
-
建立 Cloud Storage 值區,用於匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_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 執行個體內的資料庫名稱
- offload:如要啟用及使用無伺服器匯出功能,請將其值設為
true
。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false "bakExportOptions": { "differentialBase":true } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 匯出差異備份:
使用任何要求資料之前,請先替換以下項目:
- 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 執行個體內的資料庫名稱
- offload:如要啟用及使用無伺服器匯出功能,請將這個值設為
true
。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false "bakExportOptions": { bakType:"DIFF" } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即撤銷。
匯出交易記錄
您可以為所有已啟用時間點復原 (PITR) 的 Cloud SQL for SQL Server 執行個體,以及儲存在 Cloud Storage 中的記錄,匯出交易記錄。
gcloud
-
建立 Cloud Storage 值區,用於匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 找出要匯出的 Cloud SQL 執行個體的服務帳戶。如要這麼做,請執行
gcloud sql instances describe
指令。在輸出內容中尋找serviceAccountEmailAddress
欄位。gcloud sql instances describe INSTANCE_NAME
- 使用
gcloud storage buckets add-iam-policy-binding
將storage.Admin
身分與存取權管理角色授予服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 設定及管理儲存桶的 IAM 政策」。 匯出交易記錄。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_PATH --export-log-start-time=START_DATE_AND_TIME / --export-log-end-time=END_DATE_AND_TIME / --database=DATABASE_NAME --bak-type=TLOG
如要瞭解如何使用
gcloud sql export bak
指令,請參閱 指令參考資料頁面。- 如果您不需要保留先前設定的 IAM 角色,請立即撤銷。
REST
-
這不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供值區的
storage.Admin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「設定及管理值區的 IAM 政策」。 - 匯出交易記錄。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- FOLDER_PATH:Cloud Storage 值區中資料夾的路徑。Cloud SQL 會將交易記錄匯出至這個資料夾。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
exportLogStartTime
:匯出交易記錄的開始日期和時間。exportLogEndTime
:要匯出的交易記錄結束日期和時間。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/FOLDER_PATH", "databases": ["DATABASE_NAME"] "bakExportOptions": { bakType:"TLOG" exportLogStartTime: START_DATE_AND_TIME exportLogEndTime: END_DATE_AND_TIME } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即予以移除。
使用分割匯出功能
條紋匯出功能的優點如下:
- 縮短作業完成所需的時間
- 可匯出超過 5 TB 的資料庫
使用分割匯出功能的潛在缺點是,備份會分割成多個檔案,而非由單一檔案組成。這個集合稱為「條紋集合」,請參閱條紋媒體集合中的備份裝置 (條紋集合)。在 Cloud SQL 中,您會匯出至 Cloud Storage 中的空資料夾,而不是產生單一檔案。詳情請參閱「如何使用分割匯出功能」。
規劃作業
分割匯出作業可提升匯出效能。不過,如果您的用途需要單一輸出檔案,或是資料庫大小小於 5 TB,且效能提升並非必要,您可能會想使用未分割的匯出作業。
如果您決定使用條紋匯出功能,請考慮條紋數量。您可以在 gcloud CLI 指令或 REST API 呼叫中指定這個值。不過,如果您想為效能設定最佳條紋數量,或是不確定數量,請省略數字。系統會自動設定最佳的條紋數量。
Cloud SQL for SQL Server 目前支援的條紋數量上限為 64 個。
如何使用區塊匯出
gcloud
- 建立 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 權限」。 - 如要匯出資料庫,請指定
--striped
參數和/或--stripe_count
的值。為--stripe_count
設定值時,表示您要使用--striped
參數。如果您指定--no-striped
,但指定--stripe_count
的值,就會發生錯誤:gcloud beta sql export bak INSTANCE_NAME \ gs://BUCKET_NAME/STRIPED_EXPORT_FOLDER \ --database=DATABASE_NAME --striped --stripe_count=NUMBER
如要瞭解如何使用
gcloud beta sql export bak
指令,請參閱 指令參考資料頁面。 - 如果您不需要保留先前設定的 IAM 角色,請立即 撤銷。
REST v1
-
建立 Cloud Storage 值區來匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供值區的
legacyBucketWriter
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。 - 匯出資料庫:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_folder:匯出分割集的資料夾路徑 (位於 Cloud Storage 值區)
- database_name:Cloud SQL 執行個體中的資料庫名稱
- true | false:設為
true
即可使用區塊匯出功能。如果您指定true
但未指定條紋數量,系統會自動設定最佳條紋數量 - number_of_stripes:要使用的條紋數量。如果指定,則
striped
會隱含為true
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "databases": ["database_name"], "bakExportOptions": { "striped": true | false, "stripe_count": ["number_of_stripes"] } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即予以移除。
REST v1beta4
-
建立 Cloud Storage 值區來匯出資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供值區的
legacyBucketWriter
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。 - 匯出資料庫:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_folder:匯出條紋集時,要匯出至的 Cloud Storage 值區資料夾路徑
- database_name:Cloud SQL 執行個體中的資料庫名稱
- true | false:設為
true
即可使用區塊匯出功能。如果您指定true
但未指定條紋數量,系統會自動設定最佳條紋數量 - number_of_stripes:要使用的條紋數量。如果指定,則
striped
會隱含為true
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
JSON 要求主體:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "databases": ["database_name"], "bakExportOptions": { "striped": true | false, "stripe_count": ["number_of_stripes"] } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
- 如果您不需要保留先前設定的 IAM 角色,請立即予以移除。
匯入至 SQL Server 適用的 Cloud SQL
匯入 SQL Server 適用的 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 角色的說明,請參閱「身分與存取權管理」。
將資料從 BAK 檔案匯入 SQL Server 專用 Cloud SQL
如要使用分割匯入功能,請參閱「使用分割匯入功能」。
您可以使用各種匯入架構。舉例來說,Cloud SQL for SQL Server 支援下列資料庫版本的 變更資料擷取 (CDC):
- SQL Server 2017 Standard
- SQL Server 2017 Enterprise
- SQL Server 2019 Standard
- SQL Server 2019 Enterprise
- SQL Server 2022 Standard
- SQL Server 2022 Enterprise
匯入支援 CDC 的資料庫時,系統會保留 KEEP_CDC 標記。
如果執行個體版本是 Microsoft SQL Server Enterprise Edition,您可以匯入已加密的 BAK 檔案。
Microsoft SQL Server Standard 版執行個體也會匯入已加密的 BAK 檔案,但只能透過 gcloud CLI 匯入。
系統僅支援 .bak
和 .bak.gz
這兩種 BAK 副檔名。目前不支援 GPG 加密備份。
請按照下列操作說明指定新的資料庫;請勿在開始匯入 BAK 檔案前建立資料庫。
如要使用 BAK 檔案將資料匯入 Cloud SQL 執行個體,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下「匯入」。
- 在「選擇要從哪個檔案匯入」欄位中,輸入要用來匯入的值區路徑和 BAK 檔案。
您可以匯入壓縮 (
.gz
) 或未壓縮的檔案。 在「檔案格式」部分中,選取「BAK」。
- 在「Destination」部分,指定要匯入 BAK 檔案的 Cloud SQL 執行個體資料庫。
- 如要開始匯入,請按一下「匯入」。
gcloud
建立 Cloud Storage 值區,用於匯入資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 請確認您已設定必要的角色和權限。
- 上傳 BAK 檔案中的資料至值區。
- 說明要匯入的執行個體:
gcloud sql instances describe INSTANCE_NAME
- 複製
serviceAccountEmailAddress
欄位。 - 使用
gcloud storage buckets add-iam-policy-binding
將storage.objectViewer
身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」一文。 - 從檔案匯入資料:
如果是加密匯入,請使用下列指令:gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME
gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME --database=DATABASE_NAME --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME --pvk-path=gs://BUCKET_NAME/KEY_NAME --prompt-for-pvk-password
- 如果您不需要保留先前設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding
將其移除。
REST v1
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。 - 從檔案匯入資料:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_bak_file:BAK 檔案的路徑
- database_name:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如要使用不同的使用者匯入,請指定
如需此要求的完整參數清單,請參閱 instances:import 頁面。importContext.importUser
屬性。 - 如果您不需要保留先前設定的 IAM 權限,請移除權限。
REST v1beta4
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」一文。 - 從檔案匯入資料:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_bak_file:BAK 檔案的路徑
- database_name:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如要使用不同的使用者匯入,請指定
如需此要求的完整參數清單,請參閱 instances:import 頁面。importContext.importUser
屬性。 - 如果您不需要保留先前設定的 IAM 權限,請移除權限。
如果您看到 ERROR_RDBMS
等錯誤,請確認 BAK 檔案確實位於值區中,且您具備該值區的正確權限。如需設定 Cloud Storage 存取權控管的相關說明,請參閱「
建立及管理存取權控管清單」。
匯入差異資料庫備份
匯入差異資料庫備份前,您必須先匯入完整備份,且資料庫必須處於完整備份匯入後的 RESTORING
狀態。
Cloud SQL 不支援在啟用時間點復原功能的執行個體上匯入差異資料庫備份。這是因為匯入資料庫備份時,必須先匯入差異資料庫備份,才能匯入 --no-recovery
。此外,如果資料庫處於 RESTORING
狀態,您就無法在執行個體上啟用時間點復原。如果匯入失敗,請執行下列任一操作,啟用時間點復原功能:
使用
--recovery-only
旗標,將處於RESTORING
狀態的資料庫上線。移除資料庫。
如要使用差異資料庫備份將資料匯入 Cloud SQL 執行個體,請執行下列步驟:
gcloud
建立 Cloud Storage 值區,用於匯入資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這不是必要步驟,但我們強烈建議您執行這項操作,以免開放其他資料的存取權限。
- 請確認您已設定必要的角色和權限。
- 上傳 BAK 檔案中的資料至值區。
- 說明要匯入的執行個體:
gcloud sql instances describe INSTANCE_NAME
- 複製
serviceAccountEmailAddress
欄位。 - 使用
gcloud storage buckets add-iam-policy-binding
將storage.objectViewer
身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」一文。 使用
--no-recovery
匯入完整備份。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \ --database=DATABASE_NAME --bak-type=FULL --no-recovery
-
匯入差異資料庫備份。
gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=DIFF --no-recovery
-
還原所有備份檔案後,請使用
--recovery-only
標記,將匯入的資料庫從RESTORING
狀態上線。強烈建議使用者不要使用 T-SQL 指令將匯入的資料庫上線。gcloud sql import bak INSTANCE_NAME \ --database=DATABASE_NAME --recovery-only
- 如果您不需要保留先前設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding
將其移除。
REST v1
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」一文。 -
使用
noRecovery
匯入完整備份。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- PATH_TO_BAK_FILE:BAK 檔案的路徑。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 匯入差異資料庫備份。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_bak_file:BAK 檔案的路徑
- database_name:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" "bakImportOptions": { "bakType": "DIFF", "noRecovery": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
還原所有備份檔案後,請使用
recoveryOnly
標記,將匯入的資料庫從RESTORING
狀態上線。強烈建議使用者不要使用 T-SQL 指令將匯入的資料庫上線。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage 值區名稱
- PATH_TO_BAK_FILE:BAK 檔案的路徑
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 權限,請移除權限。
REST v1beta4
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」一文。 -
使用
noRecovery
匯入完整備份。使用任何要求資料之前,請先替換以下項目:
- PROJECT-ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- PATH_TO_BAK_FILE:BAK 檔案的路徑。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 匯入差異資料庫備份。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_bak_file:BAK 檔案的路徑
- database_name:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" "bakImportOptions": { "bakType": "DIFF", "noRecovery": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
還原所有備份檔案後,請使用
recoveryOnly
標記,將匯入的資料庫從RESTORING
狀態上線。強烈建議使用者不要使用 T-SQL 指令將匯入的資料庫上線。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage 值區名稱
- PATH_TO_BAK_FILE:BAK 檔案的路徑
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 權限,請移除權限。
如果您看到類似 ERROR_RDBMS
的錯誤,請確認 BAK 檔案確實存在於值區中,且您擁有該值區的正確權限。如需設定 Cloud Storage 存取權控管的相關說明,請參閱「
建立及管理存取權控管清單」。
匯入交易記錄備份
交易記錄是資料庫交易和每筆交易所做的修改記錄。您可以在系統發生故障時,使用這項功能重新建立資料庫一致性。
如要使用交易記錄備份將資料匯入 Cloud SQL 執行個體,請執行下列步驟:
gcloud
選用:建立 Cloud Storage 值區,用於匯入資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
- 上傳備份檔案至值區。
- 說明要匯入的執行個體:
gcloud sql instances describe INSTANCE_NAME
- 複製
serviceAccountEmailAddress
欄位。 - 使用
gcloud storage buckets add-iam-policy-binding
將storage.objectViewer
身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」一文。 使用
--no-recovery
參數匯入完整備份。完整備份匯入完成後,請確認資料庫處於RESTORING
狀態。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=FULL --no-recovery
- 選用:匯入差異備份。
-
匯入交易記錄備份。
替換下列項目:gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=TLOG --stop-at=STOP_AT_TIMESTAMP --stop-at-mark=STOP_AT_MARK_NAME --no-recovery
- INSTANCE_NAME:執行個體名稱。
- BUCKET_NAME:Cloud Storage 值區名稱。
- BACKUP_FILENAME:備份檔案的名稱。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
- STOP_AT_TIMESTAMP:交易記錄匯入作業必須停止的時間戳記。這是選用欄位,且值必須使用 RFC 3339 格式。
- STOP_AT_MARK_NAME:系統必須停止匯入交易記錄的
標記交易。這是選填欄位,可接受任何字串做為值。如果值的格式為
lsn:log-sequence-number
,則交易記錄匯入作業會在指定的 記錄序號時停止。
-
還原所有備份檔案後,請使用
--recovery-only
標記,將匯入的資料庫從RESTORING
狀態上線。強烈建議使用者不要使用 T-SQL 指令將匯入的資料庫上線。gcloud sql import bak INSTANCE_NAME \ --database=DATABASE_NAME --recovery-only
- 如果您不需要保留先前設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding
將其移除。
REST v1
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
如需此要求的完整參數清單,請參閱 instances:import 頁面。 -
使用
noRecovery
匯入完整備份。完整備份匯入完成後,請確認資料庫處於RESTORING
狀態。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- PATH_TO_BAK_FILE:BAK 檔案的路徑。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 選用:匯入差異備份。
- 匯入交易記錄備份。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- PATH_TO_TLOG_FILE:交易記錄檔案的路徑。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
- STOP_AT_TIMESTAMP:交易記錄匯入作業必須停止的時間戳記。這是選用欄位,且值必須使用 RFC 3339 格式。
- STOP_AT_MARK_NAME:
標記的交易,系統必須在此交易停止匯入交易記錄。這是選填欄位,可接受任何字串做為值。如果值的格式為
lsn:log-sequence-number
,則交易記錄匯入作業會在指定的 記錄序號時停止。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_TLOG_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "bakType": "TLOG", "stopAt": STOP_AT_TIMESTAMP, "stopAtMark": STOP_AT_MARK_NAME, "noRecovery": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
還原所有備份檔案後,請使用
recoveryOnly
標記,將匯入的資料庫從RESTORING
狀態上線。強烈建議使用者不要使用 T-SQL 指令將匯入的資料庫上線。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage 值區名稱
- PATH_TO_BAK_FILE:BAK 檔案的路徑
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 權限,請移除權限。
REST v1beta4
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」一文。 -
使用
noRecovery
匯入完整備份。完整備份匯入完成後,請確認資料庫處於RESTORING
狀態。使用任何要求資料之前,請先替換以下項目:
- PROJECT-ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- PATH_TO_BAK_FILE:BAK 檔案的路徑。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 選用:匯入差異備份。
- 匯入交易記錄備份。其中
stopAt
和stopAtMark
為選用欄位。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
- BUCKET_NAME:Cloud Storage 值區名稱。
- PATH_TO_BAK_FILE:BAK 檔案的路徑。
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
- STOP_AT_TIMESTAMP:交易記錄匯入作業必須停止的時間戳記。這是選用欄位,且值必須使用 RFC 3339 格式。
- STOP_AT_MARK_NAME:
標記的交易,系統必須在此交易停止匯入交易記錄。這是選填欄位,可接受任何字串做為值。如果值採用
lsn:log-sequence-number
格式,則交易記錄匯入作業會在指定的 記錄序號時停止。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "bakType": "TLOG", "stopAt": STOP_AT_TIMESTAMP, "stopAtMark":STOP_AT_MARK_NAME, "noRecovery": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
還原所有備份檔案後,請使用
recoveryOnly
將匯入的資料庫上線。使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage 值區名稱
- PATH_TO_BAK_FILE:BAK 檔案的路徑
- DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
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
將要求主體儲存在名為
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 回應:
- 如果您不需要保留先前設定的 IAM 權限,請移除權限。
使用分割匯入
分割匯入的優點如下:
- 縮短作業完成所需的時間
- 可匯入超過 5 TB 的資料庫
使用條紋匯入功能的潛在缺點是,在執行匯入作業前,您必須將條紋集合中的所有檔案 (而非單一檔案) 上傳至 Cloud Storage 值區中的同一個資料夾。
規劃作業
在大多數情況下,條紋匯入可提供更佳效能,且沒有任何缺點。不過,如果您無法從特定執行個體備份至條紋集,或是資料庫小於 5 TB,且效能提升並非必要,建議您使用非條紋匯入作業。
如何使用分批匯入
gcloud
建立 Cloud Storage 值區,用於匯入資料。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 請確認您已設定必要的 IAM 角色和權限。
- 在值區中建立新資料夾。
- 如要匯入資料庫,請將資料庫的條紋式集合檔案 上傳到新資料夾。請確認所有檔案都已上傳至資料夾,且資料夾中沒有其他檔案。
- 說明您要匯出的來源執行個體:
gcloud sql instances describe INSTANCE_NAME
- 複製
serviceAccountEmailAddress
欄位。 - 使用
gcloud storage buckets add-iam-policy-binding
將storage.objectViewer
身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。 - 匯入資料夾中的資料。與非區隔匯入的差異如下:URI 會連結至上傳區隔集合的資料夾名稱,而非單一檔案,您需要指定
--striped
參數:gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \ --database=DATABASE_NAME --striped
- 如果您不需要保留先前設定的 IAM 權限,請使用
gcloud storage buckets remove-iam-policy-binding
將其移除。
REST v1
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」一文。 - 從檔案匯入資料:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_folder:資料夾路徑 (位於 Cloud Storage 值區中),其中包含資料帶組
- database_name:在 Cloud SQL 執行個體中建立的資料庫名稱
- true | false:設為
true
即可使用分割匯入
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "database": "database_name", "bakImportOptions": { "striped": true | false } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如要使用不同的使用者匯入,請指定
如需此要求的完整參數清單,請參閱 instances:import 頁面。importContext.importUser
屬性。 - 如果您不需要保留先前設定的 IAM 權限,請移除權限。
REST v1beta4
- 建立 Cloud Storage 值區。
上傳檔案至值區。
如需將檔案上傳至值區的說明,請參閱上傳物件。
- 為執行個體提供值區的
storage.objectAdmin
IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」一文。 - 從檔案匯入資料:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage 值區名稱
- path_to_folder:資料夾路徑 (位於 Cloud Storage 值區內),其中包含資料列組
- database_name:在 Cloud SQL 執行個體中建立的資料庫名稱
- true | false:設為
true
即可使用分割匯入
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
JSON 要求主體:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "database": "database_name", "bakImportOptions": { "striped": true | false } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如要使用不同的使用者匯入,請指定
如需此要求的完整參數清單,請參閱 instances:import 頁面。importContext.importUser
屬性。 - 如果您不需要保留先前設定的 IAM 權限,請移除權限。
如果您看到類似 ERROR_RDBMS
的錯誤,請確認該資料夾確實存在。如果資料表已存在,請確認您對值區擁有正確的權限。如需設定 Cloud Storage 存取權控管的相關說明,請參閱「
建立及管理存取權控管清單」。
後續步驟
- 瞭解如何檢查匯入與匯出作業的狀態。
- 進一步瞭解匯入及匯出資料的最佳做法。
- 匯入和匯出作業的已知問題。