Spanner Omni 備份

您可以使用 Spanner Omni 視需要建立資料庫完整備份,或透過備份排程建立備份。備份會儲存資料庫的完整資料,如果運算子或應用程式錯誤導致邏輯資料損毀,您可以還原備份。

Spanner Omni 備份總覽

備份具有高可用性,且最多可保留一年 (自建立時間起算)。每個備份都有相關聯的 createTimeversionTimecreateTime 是指 Spanner Omni 開始建立備份的時間戳記。versionTime 是備份作業擷取資料庫內容的時間戳記。備份內容包含 versionTime 時資料庫的一致性檢視畫面。

如果是隨選備份,createTimeversionTime 預設相同。如有需要,您可以在建立隨需備份時指定較舊的 versionTime,但必須在資料庫的版本保留期限內。

如果是排定的備份作業,versionTime 是您建立備份排程時選擇的時間。Spanner Omni 會在 versionTime 的四小時內開始建立備份,因此 createTime 會落在這四小時內。這與隨需備份不同,因為 Spanner Omni 收到要求後就會開始建立備份。

舉例來說,假設您建立的備份排程頻率為 0 7 * * * UTC (每天世界標準時間上午 7:00)。也就是說,每次備份的 versionTime 都是世界標準時間上午 7 點,而 createTime 則是世界標準時間上午 7 點到 11 點這四小時內的某個時間戳記。

主要功能與特色

Spanner Omni 備份可確保資料一致性、提供彈性的外部複寫功能,以及自動到期機制。

  • 資料一致性:Spanner Omni 資料庫的備份在備份versionTime時,具有交易一致性和外部一致性。

  • 複製:備份檔案會儲存在 Spanner Omni 部署作業以外的外部儲存系統。

  • 自動到期:所有備份都有使用者指定的到期日,系統會在到期日刪除備份。Spanner Omni 會非同步刪除過期備份,因此備份過期到實際刪除之間可能會有一段延遲時間。

外部儲存空間

外部儲存空間是指 Spanner Omni 部署作業以外的遠端儲存空間。您可以將 Amazon Simple Storage Service (Amazon S3)、Cloud Storage 或任何與 Amazon S3 相容的儲存空間,設為外部儲存空間。Spanner Omni 會將備份檔案儲存在這個外部儲存空間。

管理外部儲存空間

您可以建立、刪除及列出備份的儲存位置,藉此管理外部儲存空間。

建立外部儲存空間

如要建立 Amazon S3 外部儲存空間,請執行下列指令:

spanner external-storages create EXTERNAL_STORAGE_ID \
  --s3-bucket-name=BUCKET_NAME \
  --s3-region=AWS_REGION \
  --s3-assume-role-arn=ASSUME_ROLE_ARN

建立 Cloud Storage 外部儲存空間

如要建立 Cloud Storage 外部儲存空間,請執行下列指令:

spanner external-storages create EXTERNAL_STORAGE_ID \
   --gcs-bucket-name=BUCKET_NAME

建立與 Amazon S3 相容的外部儲存空間

如要建立與 Amazon S3 相容的外部儲存空間,請執行下列指令:

spanner external-storages create EXTERNAL_STORAGE_ID \
    --s3-compatible-bucket-name=BUCKET_NAME \
    --s3-compatible-endpoint=ENDPOINT \
    --s3-compatible-credential-file-path=FILE

刪除外部儲存空間

如要刪除外接儲存裝置,請先確認沒有現有或進行中的備份作業。然後執行下列指令:

spanner external-storages delete EXTERNAL_STORAGE_ID

說明外部儲存空間

如要取得外部儲存空間的相關資訊,請執行下列指令:

spanner external-storages describe EXTERNAL_STORAGE_ID

列出外部儲存空間

如要取得外部儲存空間清單,請執行下列指令:

spanner external-storages list

備份描述元

備份描述元代表儲存在外部儲存空間的已完成備份作業中繼資料和備份檔案路徑。

spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID

備份資訊

建立備份時,備份中繼資料會儲存在 Spanner Omni,備份檔案則會儲存在外部儲存空間。

備份內容包含備份時間點versionTime的資料庫資訊,如下所示:

  • 完整備份包含所有資料。

  • 結構定義資訊,包括資料表名稱、欄位、資料類型、次要索引、變更串流,以及這些實體之間的關係。

  • 使用 ALTER DATABASE SET OPTIONS 指令設定的所有資料庫選項。

Spanner Omni 備份不包含下列資訊:

  • versionTime 之後對資料或結構定義所做的任何修改。

  • 身分與存取權管理 (IAM) 政策。

  • 變更串流資料記錄。雖然系統會儲存變更串流結構定義,但變更串流資料應與所描述的變更幾乎同時串流及使用。

為確保備份的外部一致性,Spanner Omni 會在 versionTime 固定資料庫內容。這樣一來,垃圾收集系統就不會在備份作業期間移除相關資料值。

備份管理

如要建立備份,您必須具備下列權限。請管理員在部署作業中授予您下列 IAM 角色:

動作 IAM 角色
建立、查看、更新及刪除備份 roles/spanner.backupAdmin
建立及查看備份 roles/spanner.backupWriter

建立備份

建立隨選備份。

spanner backups create BACKUP_NAME \
--database=DATABASE_ID \
--retention-period=RETENTION_PERIOD \
--async

刪除備份

刪除備份中繼資料和檔案。

spanner backups delete BACKUP_NAME

描述備份

擷取備份的相關資訊。

spanner backups describe BACKUP_NAME

列出備份

列出部署作業中現有的 Spanner Omni 備份。

spanner backups list

更新備份到期日

更新備份的到期日。

spanner backups update-metadata BACKUP_NAME \
--expiration-date=EXPIRATION_DATE

匯入備份

如果不小心刪除部署作業,只要未從外部儲存空間刪除備份檔案,即可匯入備份。

  1. 在新部署作業中建立外部儲存空間,並使用原始部署作業中的相同 Amazon S3 或 Cloud Storage 值區。

    spanner external-storages create EXTERNAL_STORAGE_ID \
      --gcs-bucket-name=BUCKET_NAME
    
  2. 列出外部儲存空間中的備份描述元。

    spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID
    
  3. 選取備份描述元,然後匯入新的部署作業。

    spanner backups import BACKUP_NAME \
     --external-storage EXTERNAL_STORAGE_ID \
     --backup-descriptor BACKUP_DESCRIPTOR \
     --retention-period 24h
    

備份排程

您可以使用 Spanner Omni 排定資料庫的完整備份作業。您可以在排程中指定 Spanner Omni 建立備份的頻率。

完整備份排程會每 12 小時或更久建立一次備份,系統會在排定時間的 30 分鐘內開始備份,每個資料庫最多可有四個備份排程。

備份排程管理

如要建立及管理備份排程,您必須具備下列權限。請管理員在部署作業中授予您下列 IAM 角色:

  • 建立、查看、更新及刪除備份時間表: roles/spanner.backupAdmin

  • 建立及查看備份排程:roles/spanner.backupWriter

建立備份排程

為 Spanner Omni 資料庫建立新的備份排程。

spanner backup-schedules create SCHEDULE_ID \
  --database=DATABASE_ID \
  --retention-duration=RETENTION_DURATION \
  --cron="CRONTAB_EXPRESSION"

取得備份排程

取得特定備份排程的相關資訊。

spanner backup-schedules describe SCHEDULE_ID --database=DATABASE_ID

列出備份排程

列出指定資料庫的所有備份排程。

spanner backup-schedules list --database=DATABASE_ID

更新備份排程

更新現有備份時間表的屬性。

spanner backup-schedules update SCHEDULE_ID \
  --database=DATABASE_ID \
  --retention-duration=RETENTION_DURATION \
  --cron="CRONTAB_EXPRESSION"

刪除備份排程

從資料庫中刪除備份排程。

spanner backup-schedules delete SCHEDULE_ID --database=DATABASE_ID

設定 IAM 存取控管政策

為備份時間表設定 IAM 存取控管政策。

spanner backup-schedules set-iam-policy SCHEDULE_ID \
  --database=DATABASE_ID \
  policy.json

取得 IAM 存取控管政策

取得備份排程的身分與存取權管理存取控管政策。

spanner backup-schedules get-iam-policy SCHEDULE_ID --database=DATABASE_ID

比較備份儲存空間與資料庫儲存空間

備份的儲存空間大小可能小於或大於建立備份時的來源資料庫儲存空間大小。

備份的儲存空間可能比資料庫的儲存空間小,因為備份只包含一個版本的資料,而即時資料庫可能因持續進行的作業而包含多個版本。資料格式和壓縮方式的差異,也可能導致備份大小較小。

反之,備份的儲存空間可能會大於資料庫的儲存空間,具體取決於資料庫的狀態和備份建立時間。

基於類似原因,從備份還原資料庫時,資料庫的儲存空間可能會大於資料庫的儲存空間。如果備份建立後,大量資料遭到刪除並壓縮,就可能發生這種情況。因此,備份大小取決於備份建立時間,以及後續對資料庫執行的作業。

沒有任何公式可預測備份大小與即時資料庫的相對大小。如果資料庫的寫入率很高 (熱資料庫),備份大小可能會小於即時資料庫。不過在某些情況下,備份大小可能會更大。