使用 BAK 檔案和交易記錄檔案匯出及匯入

本頁說明如何使用 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 執行個體的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin身分與存取權管理 (IAM) 角色
  • 自訂角色,包括下列權限:
    • storage.objects.create
    • storage.objects.list (適用於條紋匯出和交易記錄匯出)
    • storage.objects.delete (適用於條紋匯出和交易記錄匯出)
    • storage.buckets.get (僅限匯出交易記錄)

如需 IAM 角色的相關說明,請參閱「身分與存取權管理」。

從 Cloud SQL for SQL Server 將資料匯出至 BAK 檔案

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [匯出]
  4. 在「檔案格式」部分,按一下「BAK」
  5. 在「要匯出的資料」部分,使用下拉式選單選取要匯出的資料庫。
  6. 在「目的地」部分,選取「瀏覽」,搜尋匯出作業的 Cloud Storage 值區或資料夾。
  7. 按一下「匯出」即可開始匯出。

gcloud

  1. 建立 Cloud Storage bucket
  2. 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。執行 gcloud sql instances describe 指令即可完成這項操作。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  4. 匯出資料庫:
    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FILENAME \
    --database=DATABASE_NAME
      

    如要瞭解如何使用 gcloud sql export bak 指令,請參閱 指令參考資料頁面

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

REST v1

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 legacyBucketWriter IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  3. 匯出資料庫: <

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

    • 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 回應:

  4. 如果您不需要保留先前設定的 IAM 角色,請立即移除。
如需此要求的完整參數清單,請參閱執行個體:匯出頁面。

REST v1beta4

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  3. 匯出資料庫: <

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

    • 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 回應:

  4. 如果您不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
如需此要求的完整參數清單,請參閱執行個體:匯出頁面。

匯出差異資料庫備份

匯出差異資料庫備份前,您必須先匯出差異基準。

如果其他服務或功能 (例如時間點復原和唯讀備用資源) 在完整備份匯出和差異備份匯出之間觸發完整備份,則必須再次觸發完整備份匯出。

為進一步瞭解這點,請參考以下範例:

  1. 您在上午 7 點提出完整備份要求。
  2. 您在上午 9 點啟用時間點復原功能,這會觸發執行個體的完整備份作業。
  3. 您嘗試在下午 5 點進行差異備份。由於上次完整備份是由時間點還原作業觸發,因此這項匯出要求會失敗,並顯示錯誤訊息。

Cloud SQL 不支援在備用資源執行個體上使用 --differential-base--bak-type=DIFF 匯出資料庫。

gcloud

  1. 建立 Cloud Storage bucket。
  2. 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。執行 gcloud sql instances describe 指令即可完成這項操作。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  4. 匯出資料庫做為差異基準。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \
    --database=DATABASE_NAME --differential-base

    如要瞭解如何使用 gcloud sql export bak 指令,請參閱 指令參考資料頁面

  5. 匯出差異備份。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=DIFF
      

    如要瞭解如何使用 gcloud sql export bak 指令,請參閱 指令參考資料頁面

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

REST v1

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 legacyBucketWriter IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  3. 匯出完整資料庫備份做為差異備份的基準。 <

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

    • 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 回應:

  4. 匯出差異備份。 <

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

    • 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 回應:

  5. 如果您不需要保留先前設定的 IAM 角色,請立即移除。
如需此要求的完整參數清單,請參閱執行個體:匯出頁面。

REST v1beta4

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  3. 匯出完整資料庫備份做為差異備份的基準。 <

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

    • 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 回應:

  4. 匯出差異備份: <0x0A

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

    • 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 回應:

  5. 如果您不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
如需此要求的完整參數清單,請參閱執行個體:匯出頁面。

匯出交易記錄

您可以匯出所有已啟用時間點復原 (PITR) 功能,且記錄檔儲存在 Cloud Storage 中的 Cloud SQL for SQL Server 執行個體交易記錄。

gcloud

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。如要這麼做,請執行 gcloud sql instances describe 指令。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.Admin 身分與存取權管理角色授予服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 在 bucket 上設定及管理 IAM 政策」。
  4. 匯出交易記錄。

    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 指令,請參閱 指令參考資料頁面

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

REST

  1. 建立 Cloud Storage bucket。

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 storage.Admin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「設定及管理值區的 IAM 政策」。
  3. 匯出交易記錄。 <0

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • FOLDER_PATH:Cloud Storage 值區中資料夾的路徑。Cloud SQL 會將交易記錄匯出至這個資料夾。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME
    • 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 回應:

  4. 如果您不需要保留先前設定的 IAM 角色,請立即移除。
如需此要求的完整參數清單,請參閱 instances.export 頁面。

使用條紋匯出功能

條紋匯出的優點如下:

  • 縮短作業完成所需時間
  • 可匯出超過 5 TB 的資料庫

使用條紋匯出功能可能會有一個缺點,就是備份檔會分割成一組檔案,而不是單一檔案。這個集合稱為「條帶集」;請參閱「條帶媒體集 (條帶集) 中的備份裝置」。在 Cloud SQL 中,您會匯出至 Cloud Storage 中的空白資料夾,而不是產生單一檔案。詳情請參閱「如何使用條紋匯出功能」。

規劃作業

條紋匯出功能可提升匯出作業的效能。不過,如果您的用途只需要單一輸出檔案,或是資料庫大小不到 5 TB,且不要求快速效能,則可使用非條紋匯出。

如果您決定使用條紋匯出功能,請考量條紋數量。您可以在 gcloud CLI 指令或 REST API 呼叫中指定這個值。不過,如要取得最佳效能的條紋數量,或不知道數量,請省略數量。系統會自動設定最佳的條紋數量。

Cloud SQL for SQL Server 目前最多支援 64 個條帶。

如何使用條紋匯出功能

gcloud

  1. 建立 Cloud Storage bucket。
  2. 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。如要這麼做,請執行 gcloud sql instances describe 指令。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectAdmin 身分與存取權管理角色授予服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  4. 如要匯出資料庫,請指定 --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 指令,請參閱 指令參考資料頁面

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

REST v1

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 legacyBucketWriter IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱使用 IAM 權限
  3. 匯出資料庫: <0

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage 值區名稱
    • path_to_folder:要將條紋集匯出至的資料夾路徑 (位於 Cloud Storage bucket 中)
    • 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 回應:

  4. 如果您不需要保留先前設定的 IAM 角色,請立即移除。
如需此要求的完整參數清單,請參閱執行個體:匯出頁面。

REST v1beta4

  1. 建立 Cloud Storage 值區,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供值區的 legacyBucketWriter IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱使用 IAM 權限
  3. 匯出資料庫: <0

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage 值區名稱
    • path_to_folder:要將已去除條紋的資料集匯出至哪個資料夾 (位於 Cloud Storage bucket 中)
    • 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 回應:

  4. 如果您不需要保留先前設定的 IAM 角色,請立即移除。
如需此要求的完整參數清單,請參閱執行個體:匯出頁面。

匯入至 SQL Server 適用的 Cloud SQL

將資料匯入 SQL Server 適用的 Cloud SQL 時,需要具備的角色和權限

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

此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin IAM 角色
  • 自訂角色,包括下列權限:
    • storage.objects.get
    • storage.objects.list (僅限條紋匯入)

如需 IAM 角色的相關說明,請參閱「身分與存取權管理」。

將 BAK 檔案中的資料匯入 Cloud SQL for SQL Server

如要使用條紋匯入功能,請參閱「使用條紋匯入功能」。

您可以使用各種匯入架構。舉例來說,SQL Server 適用的 Cloud SQL 支援下列資料庫版本的 變更資料擷取 (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 執行個體:

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下「匯入」
  4. 在「選擇要從哪個檔案匯入」欄位中,輸入要用於匯入作業的值區和 BAK 檔案路徑。

    您可以匯入壓縮 (.gz) 或未壓縮的檔案。

  5. 在「檔案格式」部分,選取「BAK」

  6. 在「目的地」部分,指定要匯入 BAK 檔案的 Cloud SQL 執行個體資料庫。
  7. 如要開始匯入,請按一下「匯入」

gcloud

  1. 建立 Cloud Storage 值區,用於匯入作業。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 請確認您已設定必要的角色和權限。
  3. 上傳 BAK 檔案中的資料至 bucket。
  4. 說明您要匯入的目標執行個體:
    gcloud sql instances describe INSTANCE_NAME
  5. 複製 serviceAccountEmailAddress 欄位。
  6. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色 授予該 bucket 的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  7. 從檔案匯入資料:
    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
  8. 如果您不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 移除這些權限。

REST v1

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  4. 從檔案匯入資料: <0x0A

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

    • 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 回應:

    如要使用不同的使用者匯入,請指定 importContext.importUser 屬性。

    如需此要求的完整參數清單,請參閱執行個體:匯入頁面。
  5. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  4. 從檔案匯入資料: <0x0A

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

    • 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 回應:

    如要使用不同的使用者匯入,請指定 importContext.importUser 屬性。

    如需此要求的完整參數清單,請參閱執行個體:匯入頁面。
  5. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

如果收到類似 ERROR_RDBMS 的錯誤訊息,請確認 BAK 檔案位於值區中,且您具備值區的正確權限。如需設定 Cloud Storage 中存取權控管的說明,請參閱「 建立及管理存取權控管清單」。

匯入差異資料庫備份

匯入差異資料庫備份前,您需要匯入完整備份,且資料庫在匯入完整備份後必須處於 RESTORING 狀態。

如果執行個體已啟用時間點復原功能,Cloud SQL 就不支援匯入差異資料庫備份。這是因為匯入差異資料庫備份時,必須先匯入含有 --no-recovery 的資料庫備份。此外,如果資料庫處於 RESTORING 狀態,您就無法在執行個體上啟用時間點復原功能。如果匯入失敗,請執行下列任一操作來啟用時間點復原:

  • 使用 --recovery-only 旗標,將處於 RESTORING 狀態的資料庫上線。

  • 移除資料庫。

如要使用差異資料庫備份將資料匯入 Cloud SQL 執行個體,請按照下列步驟操作:

gcloud

  1. 建立 Cloud Storage 值區,用於匯入作業。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 請確認您已設定必要的角色和權限。
  3. 上傳 BAK 檔案中的資料至 bucket。
  4. 說明您要匯入的目標執行個體:
    gcloud sql instances describe INSTANCE_NAME
  5. 複製 serviceAccountEmailAddress 欄位。
  6. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色 授予該 bucket 的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  7. 使用 --no-recovery 匯入完整備份。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \
    --database=DATABASE_NAME --bak-type=FULL --no-recovery
  8. 匯入差異資料庫備份。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=DIFF --no-recovery
  9. 還原所有備份檔案後,請使用 --recovery-only 標記,將匯入的資料庫從 RESTORING 狀態上線。強烈建議使用者不要使用 T-SQL 指令,讓匯入的資料庫上線。

    gcloud sql import bak INSTANCE_NAME \
    --database=DATABASE_NAME --recovery-only
  10. 如果您不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 移除這些權限。

REST v1

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  4. 使用 noRecovery 匯入完整備份。

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_BAK_FILE:BAK 檔案的路徑。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME

    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 回應:

  5. 匯入差異資料庫備份。 <0x0

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

    • 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 回應:

  6. 還原所有備份檔案後,請使用 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 回應:

  7. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  4. 使用 noRecovery 匯入完整備份。

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

    • PROJECT-ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_BAK_FILE:BAK 檔案的路徑。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME

    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 回應:

  5. 匯入差異資料庫備份。 <0x0

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

    • 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 回應:

  6. 還原所有備份檔案後,請使用 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 回應:

  7. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

如果收到類似 ERROR_RDBMS 的錯誤訊息,請確認值區中是否有 BAK 檔案,以及您是否具備值區的正確權限。如需設定 Cloud Storage 中存取權控管的說明,請參閱「 建立及管理存取權控管清單」。

匯入交易記錄備份

交易記錄會記錄資料庫的交易,以及每筆交易進行的修改。如果發生系統故障,您可以使用這項功能重新建立資料庫一致性。

如要使用交易記錄備份將資料匯入 Cloud SQL 執行個體,請按照下列步驟操作:

gcloud

  1. 選用:建立 Cloud Storage 值區,用於匯入作業。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
  2. 上傳備份檔案至 bucket。
  3. 說明您要匯入的目標執行個體:
    gcloud sql instances describe INSTANCE_NAME
  4. 複製 serviceAccountEmailAddress 欄位。
  5. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色 授予該 bucket 的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  6. 使用 --no-recovery 參數匯入完整備份。 確認完整備份匯入後,資料庫處於 RESTORING 狀態。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=FULL --no-recovery
  7. 選用:匯入差異備份
  8. 匯入交易記錄備份。

    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 bucket 名稱。
    • BACKUP_FILENAME:備份檔案名稱。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME
    • STOP_AT_TIMESTAMP:交易記錄匯入作業必須停止的時間戳記。這是選填欄位,值必須採用 RFC 3339 格式
    • STOP_AT_MARK_NAME:交易記錄匯入作業必須停止的 標記交易 。這是選填欄位,值可以是任何字串。如果值為 lsn:log-sequence-number 格式,交易記錄匯入作業會在指定的 記錄序號停止。
    重複這個步驟,直到匯入所有交易記錄備份檔為止。
  9. 還原所有備份檔案後,請使用 --recovery-only 標記,將匯入的資料庫從 RESTORING 狀態上線。強烈建議使用者不要使用 T-SQL 指令,讓匯入的資料庫上線。

    gcloud sql import bak INSTANCE_NAME \
    --database=DATABASE_NAME --recovery-only
  10. 如果您不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 移除這些權限。

REST v1

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  4. 如需此要求的完整參數清單,請參閱執行個體:匯入頁面。
  5. 使用 noRecovery 匯入完整備份。確認完整備份匯入後,資料庫處於 RESTORING 狀態。

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_BAK_FILE:BAK 檔案的路徑。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME

    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 回應:

  6. 選用:匯入差異備份
  7. 匯入交易記錄備份。 <0x0A

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_TLOG_FILE:交易記錄檔的路徑。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME
    • 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 回應:

    重複執行這個步驟,直到匯入所有交易記錄備份檔為止。
  8. 還原所有備份檔案後,請使用 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 回應:

  9. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  4. 使用 noRecovery 匯入完整備份。確認完整備份匯入後,資料庫處於 RESTORING 狀態。

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

    • PROJECT-ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_BAK_FILE:BAK 檔案的路徑。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME

    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 回應:

  5. 選用:匯入差異備份
  6. 匯入交易記錄備份。其中 stopAtstopAtMark 為選填欄位。

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • PATH_TO_BAK_FILE:BAK 檔案的路徑。
    • :Cloud SQL 執行個體內的資料庫名稱。DATABASE_NAME
    • 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 回應:

    重複執行這個步驟,直到匯入所有交易記錄備份檔為止。
  7. 還原所有備份檔案後,請使用 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 回應:

  8. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

使用條紋匯入功能

條紋匯入的優點如下:

  • 縮短作業完成所需時間
  • 可匯入超過 5 TB 的資料庫

使用條紋匯入的潛在缺點是,您必須先將條紋集中的所有檔案 (而非單一檔案) 上傳至 Cloud Storage 值區中的相同資料夾,才能執行匯入作業。

規劃作業

在大多數情況下,條紋匯入可提升效能,且沒有任何缺點。不過,如果無法從特定執行個體備份至條紋集,或資料庫小於 5 TB,且不需要快速效能,您不妨使用非條紋匯入。

如何使用條紋匯入功能

gcloud

  1. 建立 Cloud Storage 值區,用於匯入作業。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 請確認您已設定必要的 IAM 角色和權限。
  3. 建立值區中的新資料夾。
  4. 如要匯入資料庫,請 上傳條紋集 (資料庫) 的檔案至新資料夾。確認所有檔案都已上傳至資料夾,且資料夾中沒有多餘的檔案。
  5. 說明您要匯出的來源執行個體:
    gcloud sql instances describe INSTANCE_NAME
  6. 複製 serviceAccountEmailAddress 欄位。
  7. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色授予 bucket 的服務帳戶。如要進一步瞭解如何設定 IAM 權限,請參閱「 使用 IAM 權限」。
  8. 從資料夾匯入資料。與非條紋匯入作業的不同之處如下:URI 會連結至上傳條紋集的資料夾名稱,而非單一檔案,且您會指定 --striped 參數:
    gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \
    --database=DATABASE_NAME --striped
  9. 如果您不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 移除這些權限。

REST v1

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  4. 從檔案匯入資料: <0x0A

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

    • 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 回應:

    如要使用不同的使用者匯入,請指定 importContext.importUser 屬性。

    如需此要求的完整參數清單,請參閱執行個體:匯入頁面。
  5. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

  1. 建立 Cloud Storage 值區。
  2. 上傳檔案至值區。

    如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 為執行個體提供值區的 storage.objectAdmin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「使用 IAM 權限」。
  4. 從檔案匯入資料: <0x0A

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

    • 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 回應:

    如要使用不同的使用者匯入,請指定 importContext.importUser 屬性。

    如需此要求的完整參數清單,請參閱執行個體:匯入頁面。
  5. 如果您不需要保留先前設定的 IAM 權限,請移除這些權限。

如果看到類似 ERROR_RDBMS 的錯誤,請確認該資料夾確實存在。如果資料表存在,請確認您對該值區擁有正確的權限。如需設定 Cloud Storage 中存取權控管的說明,請參閱「 建立及管理存取權控管清單」。

後續步驟