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

本頁面說明如何使用 BAK 檔案將資料匯出及匯入 Cloud SQL 執行個體,以及如何使用交易記錄檔將資料匯入 Cloud SQL 執行個體。

事前準備

匯出作業會使用資料庫資源,但不會干擾正常的資料庫作業,除非執行個體佈建不足。

如需最佳做法,請參閱「匯入及匯出資料的最佳做法」。

完成匯入作業後,請驗證結果。

從 SQL Server 適用的 Cloud SQL 匯出資料

Cloud SQL 支援匯出內建 BAK 檔案。

如要透過匯出的檔案建立新執行個體,建議從備份還原至其他執行個體,或複製執行個體。

Cloud SQL 會在匯出作業期間,對所選資料庫執行完整備份。

從 SQL Server 適用的 Cloud SQL 匯出資料所需的角色和權限

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

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

  • storage.objectAdmin Identity and Access Management (IAM) 角色
  • 自訂角色,包括下列權限:
    • storage.objects.create
    • storage.objects.list (用於條帶匯出和交易記錄匯出)
    • storage.objects.delete (用於條帶匯出和交易記錄匯出)
    • storage.buckets.get (僅適用於交易記錄匯出作業)

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

從 SQL Server 適用的 Cloud SQL 將資料匯出至 BAK 檔案

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下 [匯出]。
  4. 在「檔案格式」部分,按一下「BAK」。
  5. 在「Data to export」(要匯出的資料) 區段中,使用下拉式選單選取要匯出的資料庫。
  6. 在「Destination」(目的地) 區段中,選取「Browse」(瀏覽),搜尋要匯出至哪個 Cloud Storage bucket 或資料夾。
  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-binding 將 storage.objectAdmin IAM 角色授予服務帳戶。如要進一步瞭解如何設定 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 bucket,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這個步驟並非必要,但強烈建議執行,以免開放其他資料的存取權。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage bucket 名稱
    • PATH_TO_DUMP_FILE:SQL dump 檔案的路徑
    • 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 角色,請立即移除。
如需要求的完整參數清單,請參閱 instances:export 頁面。

REST v1beta4

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

    這個步驟並非必要,但強烈建議執行,以免開放其他資料的存取權。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage bucket 名稱
    • PATH_TO_DUMP_FILE:SQL dump 檔案的路徑
    • 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 角色,請立即撤銷。
如需要求的完整參數清單,請參閱 instances:export 頁面。

匯出差異資料庫備份

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

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

請參考以下範例,進一步瞭解這項功能:

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

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-binding 將 storage.objectAdmin IAM 角色授予服務帳戶。如要進一步瞭解如何設定 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 bucket,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這個步驟並非必要,但強烈建議執行,以免開放其他資料的存取權。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage bucket 名稱
    • 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 bucket 名稱
    • 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 角色,請立即移除。
如需要求的完整參數清單,請參閱 instances:export 頁面。

REST v1beta4

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

    這個步驟並非必要,但強烈建議執行,以免開放其他資料的存取權。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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. 匯出差異備份:

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 角色,請立即撤銷。
如需要求的完整參數清單,請參閱 instances:export 頁面。

匯出交易記錄

您可以從 SQL Server 適用的 Cloud SQL 執行個體匯出交易記錄,前提是執行個體採用新網路架構、啟用時間點復原 (PITR) 功能,且記錄儲存在 Cloud Storage。

gcloud

  1. 建立 Cloud Storage bucket,用於匯出作業。
    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-binding 將 storage.Admin IAM 角色授予服務帳戶。如要進一步瞭解如何設定 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. 為執行個體提供 bucket 的 storage.Admin IAM 角色。如要進一步瞭解如何設定 IAM 權限,請參閱「在 bucket 上設定及管理 IAM 政策」。
  3. 匯出交易記錄。

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • FOLDER_PATH:Cloud Storage bucket 中的資料夾路徑。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 回覆:

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

使用條帶匯出

分區匯出的優點如下:

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

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

規劃作業

等量匯出可提升匯出作業的效能。不過,如果您的用途需要單一輸出檔案,或者資料庫大小小於 5 TB,且不需要更快的效能,則建議使用非等量匯出。

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

SQL Server 適用的 Cloud SQL 目前支援的條帶數量上限為 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-binding 將 storage.objectAdmin IAM 角色授予服務帳戶。如要進一步瞭解如何設定 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 bucket,用於匯出作業。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這個步驟並非必要,但強烈建議執行,以免開放其他資料的存取權。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 角色,請立即移除。
如需要求的完整參數清單,請參閱 instances:export 頁面。

REST v1beta4

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

    這個步驟並非必要,但強烈建議執行,以免開放存取其他資料。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 角色,請立即移除。
如需要求的完整參數清單,請參閱 instances:export 頁面。

匯入至 SQL Server 適用的 Cloud SQL

將資料匯入 SQL Server 適用的 Cloud SQL 所需的角色和權限

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

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

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

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

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

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

系統提供多種匯入架構。例如,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 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下「匯入」。
  4. 在「Choose a file to import from」(選擇要匯入的檔案) 欄位中,輸入要用於匯入作業的值區和 BAK 檔案路徑。

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

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

  6. 在「Destination」(目的地) 區段中,指定要匯入 BAK 檔案的 Cloud SQL 執行個體資料庫。
  7. 按一下「匯入」即可開始匯入。

gcloud

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

    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-binding 將 storage.objectViewer IAM 角色授予 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 bucket。
  2. 上傳檔案至值區。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 屬性。

    如需要求的完整參數清單,請參閱 instances:import 頁面。
  5. 如果不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

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

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 屬性。

    如需要求的完整參數清單,請參閱 instances:import 頁面。
  5. 如果不需要保留先前設定的 IAM 權限,請移除這些權限。

如果收到 ERROR_RDBMS 等錯誤訊息,請確認 bucket 中有 BAK 檔案,且您具備 bucket 的正確權限。如需在 Cloud Storage 中設定存取控管的協助,請參閱「建立及管理存取控管清單」。

匯入差異資料庫備份

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

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

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

  • 移除資料庫。

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

gcloud

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

    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-binding 將 storage.objectViewer IAM 角色授予 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 bucket。
  2. 上傳檔案至值區。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • 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 回覆:

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 bucket 名稱
    • 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 bucket。
  2. 上傳檔案至值區。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT-ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • 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 回覆:

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • 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 bucket 名稱
    • 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 檔案存在於 bucket 中,且您具備該 bucket 的正確權限。如需在 Cloud Storage 中設定存取控管的說明,請參閱「建立及管理存取控管清單」。

匯入交易記錄備份

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

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

gcloud

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

    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-binding 將 storage.objectViewer IAM 角色授予 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:備份檔案的名稱。
    • DATABASE_NAME:Cloud SQL 執行個體中的資料庫名稱。
    • 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 bucket。
  2. 上傳檔案至值區。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • 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 回覆:

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • 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 回覆:

    重複這個步驟,直到匯入所有交易記錄備份。
  8. 還原所有備份檔案後,請使用 recoveryOnly 旗標,將匯入的資料庫從 RESTORING 狀態變更為線上狀態。強烈建議使用者不要使用 T-SQL 指令,將匯入的資料庫上線。

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage bucket 名稱
    • 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 bucket。
  2. 上傳檔案至值區。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT-ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • 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 回覆:

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

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage bucket 名稱。
    • 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 回覆:

    重複這個步驟,直到匯入所有交易記錄備份。
  7. 還原所有備份檔案後,請使用 recoveryOnly 將匯入的資料庫上線。

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID
    • BUCKET_NAME:Cloud Storage bucket 名稱
    • 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 bucket 中的同一個資料夾。

規劃作業

在多數用途中,分區匯入可提升效能,且沒有任何缺點。不過,如果您無法從特定執行個體備份至分條集,或資料庫小於 5 TB,且不需要更快的效能,則建議使用非分條匯入。

如何使用條帶匯入

gcloud

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

    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-binding 將 storage.objectViewer IAM 角色授予 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 bucket。
  2. 上傳檔案至值區。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • path_to_folder:Cloud Storage bucket 中,stripe set 所在資料夾的路徑
    • 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 屬性。

    如需要求的完整參數清單,請參閱 instances:import 頁面。
  5. 如果不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

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

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

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

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • path_to_folder:Cloud Storage bucket 中,條帶集所在資料夾的路徑
    • 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 屬性。

    如需要求的完整參數清單,請參閱 instances:import 頁面。
  5. 如果不需要保留先前設定的 IAM 權限,請移除這些權限。

如果收到 ERROR_RDBMS 等錯誤,請確認資料表是否存在。如果資料表存在,請確認您具備 bucket 的適當權限。如需在 Cloud Storage 中設定存取控管的協助,請參閱「建立及管理存取控管清單」。

後續步驟