使用 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 Identity and Access Management (IAM) 角色
  • 自訂角色,包括下列權限:
    • storage.objects.create
    • storage.objects.list (用於條紋匯出和交易記錄匯出)
    • storage.objects.delete (用於條紋匯出和交易記錄匯出)
    • storage.buckets.get (僅限交易記錄匯出)

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

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

控制台

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

    前往 Cloud SQL 執行個體

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

gcloud

  1. 建立 Cloud Storage 值區
  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 角色,請立即予以移除。
如需此要求的完整參數清單,請參閱 instances:export 頁面。

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 角色,請立即撤銷
如需此要求的完整參數清單,請參閱 instances:export 頁面。

匯出差異資料庫備份

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

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

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

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

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

gcloud

  1. 建立 Cloud Storage 值區。
  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 角色,請立即予以移除。
如需此要求的完整參數清單,請參閱 instances:export 頁面。

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. 匯出差異備份:

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

    • 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 角色,請立即撤銷
如需此要求的完整參數清單,請參閱 instances:export 頁面。

匯出交易記錄

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

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 權限,請參閱「 設定及管理儲存桶的 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 值區。

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

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

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage 值區名稱。
    • FOLDER_PATH:Cloud Storage 值區中資料夾的路徑。Cloud SQL 會將交易記錄匯出至這個資料夾。
    • DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
    • exportLogStartTime:匯出交易記錄的開始日期和時間。
    • exportLogEndTime:要匯出的交易記錄結束日期和時間。

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export

    JSON 要求主體:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/FOLDER_PATH",
          "databases": ["DATABASE_NAME"]
          "bakExportOptions": {
            bakType:"TLOG"
            exportLogStartTime: START_DATE_AND_TIME
            exportLogEndTime: END_DATE_AND_TIME
          }
       }
    }
    

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export"

    PowerShell

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

  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 值區。
  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. 匯出資料庫:

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

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage 值區名稱
    • path_to_folder:匯出分割集的資料夾路徑 (位於 Cloud Storage 值區)
    • database_name:Cloud SQL 執行個體中的資料庫名稱
    • true | false:設為 true 即可使用區塊匯出功能。如果您指定 true 但未指定條紋數量,系統會自動設定最佳條紋數量
    • number_of_stripes:要使用的條紋數量。如果指定,則 striped 會隱含為 true

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export

    JSON 要求主體:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_folder",
          "databases": ["database_name"],
          "bakExportOptions": {
            "striped": true | false,
            "stripe_count": ["number_of_stripes"]
          }
        }
    }
    

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

    您應該會收到如下的 JSON 回應:

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

REST v1beta4

  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_folder:匯出條紋集時,要匯出至的 Cloud Storage 值區資料夾路徑
    • database_name:Cloud SQL 執行個體中的資料庫名稱
    • true | false:設為 true 即可使用區塊匯出功能。如果您指定 true 但未指定條紋數量,系統會自動設定最佳條紋數量
    • number_of_stripes:要使用的條紋數量。如果指定,則 striped 會隱含為 true

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    JSON 要求主體:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_folder",
          "databases": ["database_name"],
          "bakExportOptions": {
            "striped": true | false,
            "stripe_count": ["number_of_stripes"]
          }
        }
    }
    

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

    您應該會收到如下的 JSON 回應:

  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 角色的說明,請參閱「身分與存取權管理」。

將資料從 BAK 檔案匯入 SQL Server 專用 Cloud SQL

如要使用分割匯入功能,請參閱「使用分割匯入功能」。

您可以使用各種匯入架構。舉例來說,Cloud SQL for SQL Server 支援下列資料庫版本的 變更資料擷取 (CDC)

  • SQL Server 2017 Standard
  • SQL Server 2017 Enterprise
  • SQL Server 2019 Standard
  • SQL Server 2019 Enterprise
  • SQL Server 2022 Standard
  • SQL Server 2022 Enterprise

匯入支援 CDC 的資料庫時,系統會保留 KEEP_CDC 標記。

如果執行個體版本是 Microsoft SQL Server Enterprise Edition,您可以匯入已加密的 BAK 檔案。

Microsoft SQL Server Standard 版執行個體也會匯入已加密的 BAK 檔案,但只能透過 gcloud CLI 匯入。

系統僅支援 .bak.bak.gz 這兩種 BAK 副檔名。目前不支援 GPG 加密備份。

請按照下列操作說明指定新的資料庫;請勿在開始匯入 BAK 檔案前建立資料庫。

如要使用 BAK 檔案將資料匯入 Cloud SQL 執行個體,請按照下列步驟操作:

控制台

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

    前往 Cloud SQL 執行個體

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

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

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

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

gcloud

  1. 建立 Cloud Storage 值區,用於匯入資料。

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

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

  2. 請確認您已設定必要的角色和權限。
  3. 上傳 BAK 檔案中的資料至值區。
  4. 說明要匯入的執行個體:
    gcloud sql instances describe INSTANCE_NAME
  5. 複製 serviceAccountEmailAddress 欄位。
  6. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 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. 從檔案匯入資料:

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

    • 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 屬性。

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

REST v1beta4

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

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

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

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

    • 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 屬性。

    如需此要求的完整參數清單,請參閱 instances:import 頁面。
  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 檔案中的資料至值區。
  4. 說明要匯入的執行個體:
    gcloud sql instances describe INSTANCE_NAME
  5. 複製 serviceAccountEmailAddress 欄位。
  6. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 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 值區名稱。
    • 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 值區名稱
    • 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 值區名稱。
    • 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 值區名稱
    • 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. 上傳備份檔案至值區。
  3. 說明要匯入的執行個體:
    gcloud sql instances describe INSTANCE_NAME
  4. 複製 serviceAccountEmailAddress 欄位。
  5. 使用 gcloud storage buckets add-iam-policy-bindingstorage.objectViewer 身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 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 值區名稱。
    • 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 值區
  2. 上傳檔案至值區。

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

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

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

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

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "noRecovery": true,
            "bakType": "FULL",
          }
    
        }
    }
    
    

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

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

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage 值區名稱。
    • PATH_TO_TLOG_FILE:交易記錄檔案的路徑。
    • DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
    • STOP_AT_TIMESTAMP:交易記錄匯入作業必須停止的時間戳記。這是選用欄位,且值必須使用 RFC 3339 格式
    • STOP_AT_MARK_NAME 標記的交易,系統必須在此交易停止匯入交易記錄。這是選填欄位,可接受任何字串做為值。如果值的格式為 lsn:log-sequence-number,則交易記錄匯入作業會在指定的 記錄序號時停止。

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_TLOG_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "bakType": "TLOG",
            "stopAt": STOP_AT_TIMESTAMP,
            "stopAtMark": STOP_AT_MARK_NAME,
            "noRecovery": true,
          }
    
        }
    }
    
    

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

  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 值區名稱。
    • 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. 匯入交易記錄備份。其中 stopAtstopAtMark 為選用欄位。

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

    • PROJECT_ID:專案 ID。
    • INSTANCE_ID:執行個體 ID。
    • BUCKET_NAME:Cloud Storage 值區名稱。
    • PATH_TO_BAK_FILE:BAK 檔案的路徑。
    • DATABASE_NAME:Cloud SQL 執行個體內的資料庫名稱。
    • STOP_AT_TIMESTAMP:交易記錄匯入作業必須停止的時間戳記。這是選用欄位,且值必須使用 RFC 3339 格式
    • STOP_AT_MARK_NAME 標記的交易,系統必須在此交易停止匯入交易記錄。這是選填欄位,可接受任何字串做為值。如果值採用 lsn:log-sequence-number 格式,則交易記錄匯入作業會在指定的 記錄序號時停止。

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "bakType": "TLOG",
            "stopAt": STOP_AT_TIMESTAMP,
            "stopAtMark":STOP_AT_MARK_NAME,
            "noRecovery": true,
          }
    
        }
    }
    
    

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

  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 身分與存取權管理角色授予儲存桶的服務帳戶。如要進一步瞭解如何設定 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. 從檔案匯入資料:

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

    • 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 屬性。

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

REST v1beta4

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

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

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

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

    • 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 屬性。

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

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

後續步驟