Sao lưu và khôi phục dữ liệu

Trang này mô tả cách sử dụng tính năng sao lưu theo lịch của Cloud Firestore. Sử dụng tính năng sao lưu để bảo vệ dữ liệu của bạn khỏi bị hỏng dữ liệu ở cấp ứng dụng hoặc việc vô tình xoá dữ liệu.

Tính năng sao lưu cho phép bạn định cấu hình lịch sao lưu để thực hiện các bản sao lưu hằng ngày hoặc hằng tuần của cơ sở dữ liệu được chỉ định. Sau đó, bạn có thể sử dụng các bản sao lưu này để khôi phục dữ liệu vào cơ sở dữ liệu mới.

Giới thiệu về tính năng sao lưu

Bản sao lưu là một bản sao nhất quán của cơ sở dữ liệu tại một thời điểm nào đó. Bản sao lưu chứa tất cả dữ liệu và cấu hình chỉ mục tại thời điểm đó. Bản sao lưu không chứa chính sách về thời gian tồn tại của cơ sở dữ liệu. Bản sao lưu nằm ở cùng vị trí với cơ sở dữ liệu nguồn.

Các bản sao lưu có khoảng thời gian lưu giữ có thể định cấu hình và được lưu trữ cho đến khi hết khoảng thời gian lưu giữ hoặc cho đến khi bạn xoá bản sao lưu đó. Việc xoá cơ sở dữ liệu nguồn không tự động xoá các bản sao lưu liên quan.

Cloud Firestore lưu trữ siêu dữ liệu liên quan đến các bản sao lưu và lịch sao lưu liên quan đến một cơ sở dữ liệu. Cloud Firestore giữ lại siêu dữ liệu này cho đến khi tất cả bản sao lưu cho cơ sở dữ liệu hết hạn hoặc bị xoá.

Việc tạo hoặc giữ lại bản sao lưu không ảnh hưởng đến hiệu suất đọc hoặc ghi trong cơ sở dữ liệu trực tiếp của bạn.

Phí

Khi sử dụng tính năng sao lưu, bạn sẽ phải trả các khoản phí sau:

  • Dung lượng lưu trữ mà mỗi bản sao lưu đã sử dụng.
  • Đối với hoạt động khôi phục, bạn sẽ bị tính phí dựa trên kích thước của bản sao lưu.

Để biết thêm thông tin chi tiết và mức giá chính xác, hãy xem trang Giá.

Trước khi bắt đầu

Tính năng này cần có gói giá linh hoạt.

Vai trò bắt buộc

Để có các quyền cần thiết để quản lý bản sao lưu và lịch sao lưu, hãy yêu cầu quản trị viên cấp cho bạn một hoặc nhiều vai trò Quản lý danh tính và quyền truy cập sau đây:

  • roles/datastore.owner: Có toàn quyền truy cập vào cơ sở dữ liệu Cloud Firestore
  • Các vai trò sau đây cũng có sẵn nhưng không xuất hiện trong Bảng điều khiển Google Cloud Platform. Sử dụng Google Cloud CLI để chỉ định các vai trò sau:

    • roles/datastore.backupsAdmin: Quyền đọc và ghi đối với bản sao lưu
    • roles/datastore.backupsViewer: Quyền đọc bản sao lưu
    • roles/datastore.backupSchedulesAdmin: Quyền đọc và ghi đối với lịch sao lưu
    • roles/datastore.backupSchedulesViewer: Quyền đọc lịch biểu sao lưu
    • roles/datastore.restoreAdmin: Quyền bắt đầu hoạt động khôi phục

Tạo và quản lý lịch sao lưu

Các ví dụ bên dưới minh hoạ cách thiết lập lịch sao lưu. Đối với mỗi cơ sở dữ liệu, bạn có thể định cấu hình tối đa 1 lịch sao lưu hằng ngày và tối đa 1 lịch sao lưu hằng tuần. Bạn không thể định cấu hình nhiều lịch sao lưu hằng tuần cho các ngày khác nhau trong tuần.

Bạn không thể định cấu hình thời gian chính xác trong ngày sao lưu. Các bản sao lưu được thực hiện vào những thời điểm khác nhau mỗi ngày. Đối với lịch sao lưu hằng tuần, bạn có thể định cấu hình ngày trong tuần để sao lưu.

Tạo lịch sao lưu

Để tạo lịch sao lưu cho cơ sở dữ liệu, hãy dùng lệnh gcloud alpha firestore backups schedules create hoặc lệnh firebase firestore:databases:backups:schedules.

Tạo lịch sao lưu hằng ngày

Google Cloud
Để tạo lịch sao lưu hằng ngày, hãy đặt cờ --recurrence thành daily:
gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

Thay thế đoạn mã sau:

  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • RETENTION_PERIOD: Đặt giá trị này thành tối đa 14 tuần (14w).
Giao diện dòng lệnh (CLI) của Firebase
Để tạo lịch sao lưu hằng ngày, hãy đặt cờ --recurrence thành DAILY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

Thay thế đoạn mã sau:

  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • RETENTION_PERIOD: Đặt giá trị này thành tối đa 14 tuần (14w).
Terraform
Để tạo lịch sao lưu hằng ngày, hãy tạo tài nguyên google_firestore_backup_schedule.
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

Thay thế đoạn mã sau:

  • PROJECT_ID: Mã dự án.
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • Bạn cũng có thể sử dụng tham chiếu tài nguyên đến tài nguyên Terraform thuộc loại google_firestore_database.
  • RETENTION_PERIOD_SECONDS: Đặt thành một giá trị tính bằng giây, sau đó là "s". Giá trị tối đa là 8467200s (14 tuần).

Tạo lịch sao lưu hằng tuần

Google Cloud
Để tạo lịch sao lưu hằng tuần, hãy đặt cờ --recurrence thành weekly:
gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY
Thay thế nội dung sau:
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • RETENTION_PERIOD: Đặt giá trị này thành tối đa 14 tuần (14w).
  • DAY: Ngày trong tuần để bắt đầu sao lưu. Đặt thành một trong các giá trị sau:
    • SUN đại diện cho Chủ Nhật
    • MON đại diện cho thứ Hai
    • TUE đại diện cho thứ Ba
    • WED đại diện cho thứ Tư
    • THU đại diện cho thứ Năm
    • FRI đại diện cho thứ Sáu
    • SAT đại diện cho thứ Bảy
Giao diện dòng lệnh (CLI) của Firebase
Để tạo lịch sao lưu hằng tuần, hãy đặt cờ --recurrence thành WEEKLY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
Thay thế nội dung sau:
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • RETENTION_PERIOD: Đặt giá trị này thành tối đa 14 tuần (14w).
  • DAY: Ngày trong tuần để bắt đầu sao lưu. Đặt thành một trong các giá trị sau:
    • SUNDAY đại diện cho Chủ Nhật
    • MONDAY đại diện cho thứ Hai
    • TUESDAY đại diện cho thứ Ba
    • WEDNESDAY đại diện cho thứ Tư
    • THURSDAY đại diện cho thứ Năm
    • FRIDAY đại diện cho thứ Sáu
    • SATURDAY đại diện cho thứ Bảy
Terraform
Để tạo lịch sao lưu hằng tuần, hãy tạo tài nguyên google_firestore_backup_schedule.
resource "google_firestore_backup_schedule" "weekly-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  weekly_recurrence {
    day = DAY
  }
}

Thay thế đoạn mã sau:

  • PROJECT_ID: Mã dự án.
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • Bạn cũng có thể sử dụng tham chiếu tài nguyên đến tài nguyên Terraform thuộc loại google_firestore_database.
  • RETENTION_PERIOD_SECONDS: Đặt thành một giá trị tính bằng giây, sau đó là "s". Giá trị tối đa là 8467200s (14 tuần).
  • DAY: Ngày trong tuần để bắt đầu sao lưu. Đặt thành một trong các giá trị sau:
    • SUNDAY đại diện cho Chủ Nhật
    • MONDAY đại diện cho thứ Hai
    • TUESDAY đại diện cho thứ Ba
    • WEDNESDAY đại diện cho thứ Tư
    • THURSDAY đại diện cho thứ Năm
    • FRIDAY đại diện cho thứ Sáu
    • SATURDAY đại diện cho thứ Bảy

Liệt kê lịch sao lưu

Để liệt kê tất cả lịch sao lưu cho cơ sở dữ liệu, hãy sử dụng một trong các phương pháp sau:

Google Cloud
Dùng lệnh gcloud alpha firestore backups schedules list.
gcloud alpha firestore backups schedules list \
--database='DATABASE_ID'
Thay thế DATABASE_ID bằng mã nhận dạng của cơ sở dữ liệu. Sử dụng '(default)' cho cơ sở dữ liệu mặc định.
Giao diện dòng lệnh (CLI) của Firebase
Sử dụng lệnh firebase firestore:backups:schedules:list.
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
Thay thế DATABASE_ID bằng mã nhận dạng của cơ sở dữ liệu. Sử dụng '(default)' cho cơ sở dữ liệu mặc định.

Mô tả lịch sao lưu

Để truy xuất thông tin về lịch sao lưu, hãy sử dụng một trong các phương pháp sau:

Google Cloud
Hãy dùng lệnh gcloud alpha firestore backups schedules describe:
gcloud alpha firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
Thay thế các dòng lệnh sau:
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • BACKUP_SCHEDULE_ID: Mã của lịch biểu sao lưu. Bạn có thể xem mã của từng lịch sao lưu khi liệt kê tất cả lịch sao lưu.

Cập nhật lịch sao lưu

Để cập nhật khoảng thời gian lưu giữ của một lịch biểu sao lưu, hãy sử dụng một trong các phương pháp sau:

Google Cloud
Dùng lệnh gcloud alpha firestore backups schedules update:
gcloud alpha firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID \
--retention=RETENTION_PERIOD
Thay thế các dòng lệnh sau:
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • BACKUP_SCHEDULE_ID: Mã của lịch biểu sao lưu. Bạn có thể xem mã của từng lịch sao lưu khi liệt kê tất cả lịch sao lưu.
  • RETENTION_PERIOD: Đặt giá trị này thành tối đa 14 tuần (14w).
Giao diện dòng lệnh (CLI) của Firebase
Dùng lệnh firebase firestore:backups:schedules:update:
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
Thay thế các đoạn mã sau:
  • BACKUP_SCHEDULE: Tên tài nguyên đầy đủ của lịch biểu sao lưu. Bạn có thể xem tên của từng lịch sao lưu khi liệt kê tất cả lịch sao lưu.
  • RETENTION_PERIOD: Đặt giá trị này thành tối đa 14 tuần (14w).

Bạn có thể cập nhật khoảng thời gian lưu giữ của một lịch biểu sao lưu, nhưng không thể cập nhật khoảng thời gian lặp lại. Nếu bạn cần một lịch sao lưu có tần suất lặp lại khác, hãy xoá lịch sao lưu cũ nếu không cần nữa, rồi tạo một lịch biểu sao lưu mới với tần suất lặp lại mong muốn.

Xoá lịch sao lưu

Để xoá lịch sao lưu, hãy dùng một trong các phương pháp sau:

Google Cloud
Dùng lệnh gcloud alpha firestore backups schedules delete:
gcloud alpha firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
Thay thế các dòng lệnh sau:
  • DATABASE_ID: Mã nhận dạng của cơ sở dữ liệu cần sao lưu. Hãy đặt thành '(default)' cho cơ sở dữ liệu mặc định.
  • BACKUP_SCHEDULE_ID: Mã của lịch biểu sao lưu. Bạn có thể xem mã của từng lịch sao lưu khi liệt kê tất cả lịch sao lưu.
Giao diện dòng lệnh (CLI) của Firebase
Dùng lệnh firebase firestore:backups:schedules:delete:
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
Thay thế các đoạn mã sau:

Xin lưu ý rằng việc xoá lịch sao lưu sẽ không xoá các bản sao lưu đã tạo theo lịch biểu này. Bạn có thể chờ các tệp này hết hạn sau khoảng thời gian lưu giữ hoặc để xoá bản sao lưu theo cách thủ công, hãy xem phần xoá bản sao lưu.

Quản lý bản sao lưu

Liệt kê bản sao lưu

Để liệt kê các bản sao lưu hiện có, hãy sử dụng một trong các phương pháp sau:

Google Cloud
Sử dụng lệnh gcloud alpha firestore backups list:
gcloud alpha firestore backups list \
--format="table(name, database, state)"
Cờ --format="table(name, database, state)" sẽ định dạng kết quả thành định dạng dễ đọc hơn. Để chỉ liệt kê các bản sao lưu từ một vị trí cụ thể, hãy sử dụng cờ --location:
gcloud alpha firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"
Thay thế LOCATION bằng tên của một vị trí trong Cloud Firestore.
Giao diện dòng lệnh (CLI) của Firebase
Sử dụng lệnh firebase firestore:backups:list:
firebase firestore:backups:list
Để chỉ liệt kê các bản sao lưu từ một vị trí cụ thể, hãy sử dụng cờ --location:
firebase firestore:backups:list \
--location=LOCATION
Thay thế LOCATION bằng tên của vị trí trên Cloud Firestore.

Mô tả bản sao lưu

Để xem chi tiết về bản sao lưu, hãy dùng một trong những cách sau:

Google Cloud
Dùng lệnh gcloud alpha firestore backups describe:
gcloud alpha firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
Thay thế các dòng lệnh sau:
Giao diện dòng lệnh (CLI) của Firebase
Dùng lệnh firebase firestore:backups:get:
firebase firestore:backups:get BACKUP
Thay thế các đoạn mã sau:

Xóa dữ liệu sao lưu

Để xoá bản sao lưu, hãy dùng một trong các phương pháp sau. Cảnh báo: Bạn không thể khôi phục bản sao lưu đã xoá.
Google Cloud
Dùng lệnh gcloud alpha firestore backups delete:
gcloud alpha firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
Thay thế các dòng lệnh sau:
Giao diện dòng lệnh (CLI) của Firebase
Dùng lệnh firebase firestore:backups:delete:
firebase firestore:backups:delete \
BACKUP
Thay thế các đoạn mã sau:

Khôi phục dữ liệu từ bản sao lưu cơ sở dữ liệu

Thao tác khôi phục sẽ ghi dữ liệu từ bản sao lưu vào cơ sở dữ liệu Cloud Firestore mới.

Để bắt đầu hoạt động khôi phục, hãy sử dụng một trong các phương pháp sau:

Google Cloud
Dùng lệnh gcloud alpha firestore databases restore:
gcloud alpha firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
Thay thế các dòng lệnh sau:
  • PROJECT_ID: Mã dự án của bạn.
  • LOCATION: Vị trí của bản sao lưu cơ sở dữ liệu và vị trí của cơ sở dữ liệu mới được tạo cho dữ liệu được khôi phục.
  • BACKUP_ID: Mã nhận dạng bản sao lưu. Bạn có thể xem mã của từng bản sao lưu khi liệt kê tất cả các bản sao lưu.
  • DATABASE_ID: Mã cơ sở dữ liệu cho cơ sở dữ liệu mới. Bạn không thể sử dụng mã nhận dạng cơ sở dữ liệu đã được sử dụng.
Kết quả sẽ bao gồm các thành phần metadata, nameresponse:
metadata:
  '@type': type.googleapis.com/google.firestore.admin.v1.RestoreDatabaseMetadata
  backup: projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID
  database: projects/PROJECT_ID/databases/DATABASE_ID
  operationState: PROCESSING
  progressPercentage:
    completedWork: '20'
    estimatedWork: '100'
  startTime: '2023-12-06T14:20:17.398325Z'
name: projects/PROJECT_ID/databases/DATABASE_ID/operations/operation_uuid
response:
  '@type': type.googleapis.com/google.firestore.admin.v1.Database
  createTime: '2023-12-06T14:20:17.398325Z'
  name: projects/PROJECT_ID/databases/DATABASE_ID
  ...
Trường metadata bao gồm một thành phần progressPercentage, nêu chi tiết tiến trình ước tính của việc khôi phục tính đến thời điểm hiện tại và một operationState chỉ định trạng thái tổng thể của việc khôi phục. Để truy xuất lại thông tin này, hãy sử dụng gcloud firestore operations list:
gcloud firestore operations list --database=DATABASE_ID
hoặc sử dụng trường name của dữ liệu đầu ra được mô tả ở trên với gcloud firestore operations describe:
gcloud firestore operations describe OPERATION_NAME
Giao diện dòng lệnh (CLI) của Firebase
Dùng lệnh firebase firestore:databases:restore:
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
Thay thế các đoạn mã sau:
  • BACKUP: Tên tài nguyên đầy đủ của bản sao lưu. Bạn có thể xem tên của từng bản sao lưu khi liệt kê tất cả các bản sao lưu.
  • DATABASE_ID: Mã cơ sở dữ liệu cho cơ sở dữ liệu mới. Bạn không thể sử dụng mã nhận dạng cơ sở dữ liệu đã được sử dụng.