สำรองและกู้คืนข้อมูล

หน้านี้อธิบายวิธีใช้ฟีเจอร์Cloud Firestoreการสำรองข้อมูลตามกำหนดเวลา ใช้การสำรองข้อมูลเพื่อปกป้องข้อมูลจากการเสียหายในระดับแอปพลิเคชันหรือการลบข้อมูลโดยไม่ตั้งใจ

การสำรองข้อมูลช่วยให้คุณกำหนดค่ากำหนดเวลาการสำรองข้อมูลเพื่อสำรองข้อมูลฐานข้อมูลที่ระบุรายวันหรือรายสัปดาห์ได้ จากนั้นคุณจะใช้ข้อมูลสํารองเหล่านี้เพื่อกู้คืนข้อมูลไปยังฐานข้อมูลใหม่ได้

เกี่ยวกับข้อมูลสำรอง

ข้อมูลสํารองคือสําเนาฐานข้อมูลที่สอดคล้องกัน ณ เวลาหนึ่งๆ ข้อมูลสํารองจะมีข้อมูลและการกำหนดค่าดัชนีทั้งหมด ณ เวลานั้น ข้อมูลสํารองจะไม่มีนโยบายอายุการเก็บข้อมูลของฐานข้อมูล ข้อมูลสํารองจะอยู่ในตําแหน่งเดียวกับฐานข้อมูลต้นทาง

ข้อมูลสํารองมีระยะเวลาการเก็บรักษาที่กำหนดได้และระบบจะจัดเก็บไว้จนกว่าระยะเวลาการเก็บรักษาจะหมดอายุหรือจนกว่าคุณจะลบข้อมูลสํารอง การลบฐานข้อมูลต้นทางจะไม่ลบข้อมูลสํารองที่เกี่ยวข้องโดยอัตโนมัติ

Cloud Firestore จัดเก็บข้อมูลเมตาที่เกี่ยวข้องกับการสำรองข้อมูลและกำหนดการสำรองข้อมูลที่เกี่ยวข้องกับฐานข้อมูล Cloud Firestore จะเก็บข้อมูลเมตานี้ไว้จนกว่าข้อมูลสํารองทั้งหมดของฐานข้อมูลจะหมดอายุหรือถูกลบ

การสร้างหรือเก็บข้อมูลสํารองจะไม่ส่งผลต่อประสิทธิภาพการอ่านหรือเขียนในฐานข้อมูลที่ใช้งานอยู่

ค่าใช้จ่าย

เมื่อใช้ข้อมูลสํารอง ระบบจะเรียกเก็บเงินจากคุณสำหรับรายการต่อไปนี้

  • ปริมาณพื้นที่เก็บข้อมูลที่ใช้โดยข้อมูลสำรองแต่ละรายการ
  • สำหรับการดำเนินการกู้คืน ระบบจะเรียกเก็บเงินตามขนาดของข้อมูลสำรอง

ดูรายละเอียดเพิ่มเติมและราคาที่แน่นอนได้ที่หน้าราคา

ก่อนเริ่มต้น

ฟีเจอร์นี้ต้องใช้แพ็กเกจการกำหนดราคา Blaze

บทบาทที่จำเป็น

หากต้องการสิทธิ์ที่จําเป็นในการจัดการข้อมูลสํารองและกำหนดเวลาการสํารองข้อมูล ให้ขอให้ผู้ดูแลระบบมอบหมายบทบาทการจัดการข้อมูลประจำตัวและการเข้าถึง (IAM) ต่อไปนี้อย่างน้อย 1 บทบาท

  • roles/datastore.owner: สิทธิ์เข้าถึงฐานข้อมูล Cloud Firestore แบบเต็ม
  • บทบาทต่อไปนี้ก็มีให้ใช้งานเช่นกัน แต่จะไม่ปรากฏในคอนโซล Google Cloud ใช้ Google Cloud CLI เพื่อมอบหมายบทบาทต่อไปนี้

    • roles/datastore.backupsAdmin: สิทธิ์การอ่านและเขียนข้อมูลสํารอง
    • roles/datastore.backupsViewer: สิทธิ์อ่านข้อมูลสํารอง
    • roles/datastore.backupSchedulesAdmin: สิทธิ์การอ่านและเขียนกำหนดการสำรองข้อมูล
    • roles/datastore.backupSchedulesViewer: สิทธิ์อ่านกำหนดการสำรองข้อมูล
    • roles/datastore.restoreAdmin: สิทธิ์ในการเริ่มการดําเนินการกู้คืน

สร้างและจัดการกำหนดเวลาการสํารองข้อมูล

ตัวอย่างด้านล่างแสดงวิธีตั้งค่ากำหนดการสำรองข้อมูล คุณกำหนดค่ากำหนดเวลาการสํารองข้อมูลรายวันได้สูงสุด 1 รายการและกำหนดเวลาการสํารองข้อมูลรายสัปดาห์ได้สูงสุด 1 รายการสำหรับฐานข้อมูลแต่ละแห่ง คุณไม่สามารถกำหนดค่ากำหนดเวลาการสำรองข้อมูลรายสัปดาห์หลายรายการสำหรับวันที่แตกต่างกันในสัปดาห์

คุณไม่สามารถกำหนดค่าเวลาของวันสำหรับการสํารองข้อมูลได้ ระบบจะสำรองข้อมูลในเวลาที่ต่างกันในแต่ละวัน สำหรับกำหนดการสำรองข้อมูลรายสัปดาห์ คุณสามารถกำหนดค่าวันในสัปดาห์ที่จะทำการสำรองข้อมูลได้

สร้างกำหนดเวลาการสํารองข้อมูล

หากต้องการสร้างกำหนดการสำรองข้อมูลสำหรับฐานข้อมูล ให้ใช้คำสั่ง gcloud firestore backups schedules create หรือคำสั่ง firebase firestore:databases:backups:schedules

สร้างกำหนดเวลาการสํารองข้อมูลรายวัน

gcloud
หากต้องการสร้างกำหนดการสำรองข้อมูลรายวัน ให้ตั้งค่า Flag --recurrence เป็น daily โดยทำดังนี้
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

แทนที่ค่าต่อไปนี้

  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • RETENTION_PERIOD: ตั้งค่านี้เป็นค่าสูงสุด 14 สัปดาห์ (14w)
Firebase CLI
หากต้องการสร้างกำหนดการสำรองข้อมูลรายวัน ให้ตั้งค่า Flag --recurrence เป็น DAILY โดยทำดังนี้
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

แทนที่ค่าต่อไปนี้

  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • RETENTION_PERIOD: ตั้งค่านี้เป็นค่าสูงสุด 14 สัปดาห์ (14w)
Terraform
หากต้องการสร้างกำหนดการสำรองข้อมูลรายวัน ให้สร้างทรัพยากร google_firestore_backup_schedule
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

แทนที่ค่าต่อไปนี้

  • PROJECT_ID: รหัสของโปรเจ็กต์
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • นอกจากนี้ คุณยังใช้การอ้างอิงทรัพยากรไปยังทรัพยากร Terraform ประเภท google_firestore_database ได้ด้วย
  • RETENTION_PERIOD_SECONDS: ตั้งค่านี้เป็นค่าเป็นวินาที ตามด้วย "s" ค่าสูงสุดคือ 8467200s (14 สัปดาห์)

สร้างกำหนดเวลาการสํารองข้อมูลรายสัปดาห์

gcloud
หากต้องการสร้างกำหนดเวลาการสำรองข้อมูลรายสัปดาห์ ให้ตั้งค่า Flag --recurrence เป็น weekly โดยทำดังนี้
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY
แทนที่ข้อมูลต่อไปนี้
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • RETENTION_PERIOD: ตั้งค่านี้เป็นค่าสูงสุด 14 สัปดาห์ (14w)
  • DAY: วันของสัปดาห์ที่จะสำรองข้อมูล ตั้งค่าเป็นค่าใดค่าหนึ่งต่อไปนี้
    • SUN สำหรับวันอาทิตย์
    • MON สำหรับวันจันทร์
    • TUE สำหรับวันอังคาร
    • WED สำหรับวันพุธ
    • THU สำหรับวันพฤหัสบดี
    • FRI สำหรับวันศุกร์
    • SAT สำหรับวันเสาร์
Firebase CLI
หากต้องการสร้างกำหนดเวลาการสำรองข้อมูลรายสัปดาห์ ให้ตั้งค่า Flag --recurrence เป็น WEEKLY โดยทำดังนี้
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
แทนที่ข้อมูลต่อไปนี้
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • RETENTION_PERIOD: ตั้งค่าเป็นค่าสูงสุด 14 สัปดาห์ (14w)
  • DAY: วันของสัปดาห์ที่จะสำรองข้อมูล ตั้งค่าเป็นค่าใดค่าหนึ่งต่อไปนี้
    • SUNDAY สำหรับวันอาทิตย์
    • MONDAY สำหรับวันจันทร์
    • TUESDAY สำหรับวันอังคาร
    • WEDNESDAY สำหรับวันพุธ
    • THURSDAY สำหรับวันพฤหัสบดี
    • FRIDAY สำหรับวันศุกร์
    • SATURDAY สำหรับวันเสาร์
Terraform
หากต้องการสร้างกำหนดการสำรองข้อมูลรายสัปดาห์ ให้สร้างทรัพยากร 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
  }
}

แทนที่ค่าต่อไปนี้

  • PROJECT_ID: รหัสของโปรเจ็กต์
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • นอกจากนี้ คุณยังใช้การอ้างอิงทรัพยากรไปยังทรัพยากร Terraform ประเภท google_firestore_database ได้ด้วย
  • RETENTION_PERIOD_SECONDS: ตั้งค่านี้เป็นค่าเป็นวินาที ตามด้วย "s" ค่าสูงสุดคือ 8467200s (14 สัปดาห์)
  • DAY: วันของสัปดาห์ที่จะสำรองข้อมูล ตั้งค่าเป็นค่าใดค่าหนึ่งต่อไปนี้
    • SUNDAY สำหรับวันอาทิตย์
    • MONDAY สำหรับวันจันทร์
    • TUESDAY สำหรับวันอังคาร
    • WEDNESDAY สำหรับวันพุธ
    • THURSDAY สำหรับวันพฤหัสบดี
    • FRIDAY สำหรับวันศุกร์
    • SATURDAY สำหรับวันเสาร์

แสดงรายการกำหนดการสำรองข้อมูล

หากต้องการแสดงรายการกำหนดการสำรองข้อมูลทั้งหมดสำหรับฐานข้อมูล ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คำสั่ง gcloud firestore backups schedules list
gcloud firestore backups schedules list \
--database='DATABASE_ID'
แทนที่ DATABASE_ID ด้วยรหัสของฐานข้อมูล ใช้ '(default)' สำหรับฐานข้อมูลเริ่มต้น
Firebase CLI
ใช้คำสั่ง firebase firestore:backups:schedules:list
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
แทนที่ DATABASE_ID ด้วยรหัสของฐานข้อมูล ใช้ '(default)' สำหรับฐานข้อมูลเริ่มต้น

อธิบายกำหนดการสำรองข้อมูล

หากต้องการเรียกข้อมูลเกี่ยวกับกำหนดการสำรองข้อมูล ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คำสั่ง gcloud firestore backups schedules describe ต่อไปนี้
gcloud firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
แทนที่ข้อมูลต่อไปนี้
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • BACKUP_SCHEDULE_ID: รหัสของกำหนดการสำรองข้อมูล คุณสามารถดูรหัสของกำหนดการสำรองข้อมูลแต่ละรายการเมื่อแสดงรายการกำหนดการสำรองข้อมูลทั้งหมด

อัปเดตกำหนดการสำรองข้อมูล

หากต้องการอัปเดตระยะเวลาการเก็บรักษาของกำหนดการสำรองข้อมูล ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คำสั่ง gcloud firestore backups schedules update ดังนี้
gcloud firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID \
--retention=RETENTION_PERIOD
แทนที่ข้อมูลต่อไปนี้
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • BACKUP_SCHEDULE_ID: รหัสของกำหนดการสำรองข้อมูล คุณสามารถดูรหัสของกำหนดการสำรองข้อมูลแต่ละรายการเมื่อแสดงรายการกำหนดการสำรองข้อมูลทั้งหมด
  • RETENTION_PERIOD: ตั้งค่านี้เป็นค่าสูงสุด 14 สัปดาห์ (14w)
Firebase CLI
ใช้คำสั่ง firebase firestore:backups:schedules:update ดังนี้
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
แทนที่ข้อมูลต่อไปนี้

คุณสามารถอัปเดตระยะเวลาการเก็บรักษาของกำหนดการสำรองข้อมูลได้ แต่จะอัปเดตการเกิดซ้ำไม่ได้ หากต้องการกำหนดเวลาการสำรองข้อมูลให้ซ้ำตามช่วงเวลาอื่น ให้ลบกำหนดเวลาการสำรองข้อมูลเดิมหากไม่จำเป็นแล้ว แล้วสร้างกำหนดเวลาการสำรองข้อมูลใหม่โดยกำหนดช่วงเวลาที่ต้องการ

ลบกำหนดการสำรองข้อมูล

หากต้องการลบกำหนดเวลาการสำรองข้อมูล ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คำสั่ง gcloud firestore backups schedules delete ดังนี้
gcloud firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
แทนที่ข้อมูลต่อไปนี้
  • DATABASE_ID: รหัสของฐานข้อมูลที่จะใช้สํารองข้อมูล ตั้งค่าเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • BACKUP_SCHEDULE_ID: รหัสของกำหนดการสำรองข้อมูล คุณสามารถดูรหัสของกำหนดการสำรองข้อมูลแต่ละรายการเมื่อแสดงรายการกำหนดการสำรองข้อมูลทั้งหมด
Firebase CLI
ใช้คำสั่ง firebase firestore:backups:schedules:delete ดังนี้
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
แทนที่ข้อมูลต่อไปนี้

โปรดทราบว่าการลบกำหนดการสำรองข้อมูลจะไม่ลบข้อมูลสำรองที่สร้างไว้แล้วตามกำหนดการนี้ คุณสามารถรอให้ข้อมูลสำรองหมดอายุหลังจากระยะเวลาเก็บรักษา หรือหากต้องการลบข้อมูลสำรองด้วยตนเอง โปรดดูหัวข้อลบข้อมูลสำรอง

จัดการข้อมูลสำรอง

สร้างรายการข้อมูลสำรอง

หากต้องการแสดงรายการข้อมูลสำรองที่มีอยู่ ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คําสั่ง gcloud firestore backups list ดังนี้
gcloud firestore backups list \
--format="table(name, database, state)"
Flag --format="table(name, database, state)" จะจัดรูปแบบเอาต์พุตให้เป็นรูปแบบที่อ่านง่ายขึ้น หากต้องการแสดงเฉพาะข้อมูลสำรองจากตำแหน่งที่เจาะจง ให้ใช้ Flag --location ดังนี้
gcloud firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"
แทนที่ LOCATION ด้วยชื่อCloud Firestoreตำแหน่ง
Firebase CLI
ใช้คำสั่ง firebase firestore:backups:list ดังนี้
firebase firestore:backups:list
หากต้องการแสดงเฉพาะข้อมูลสำรองจากตำแหน่งที่เจาะจง ให้ใช้ Flag --location ดังนี้
firebase firestore:backups:list \
--location=LOCATION
แทนที่ LOCATION ด้วยชื่อCloud Firestore ตำแหน่ง

อธิบายการสำรองข้อมูล

หากต้องการดูรายละเอียดเกี่ยวกับการสำรองข้อมูล ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คำสั่ง gcloud firestore backups describe ดังนี้
gcloud firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
แทนที่ข้อมูลต่อไปนี้
Firebase CLI
ใช้คำสั่ง firebase firestore:backups:get ดังนี้
firebase firestore:backups:get BACKUP
แทนที่ข้อมูลต่อไปนี้

ลบข้อมูลสำรอง

หากต้องการลบข้อมูลสํารอง ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้ คำเตือน: คุณจะกู้คืนข้อมูลสำรองที่ลบไปแล้วไม่ได้
gcloud
ใช้คำสั่ง gcloud firestore backups delete ดังนี้
gcloud firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
แทนที่ข้อมูลต่อไปนี้
Firebase CLI
ใช้คำสั่ง firebase firestore:backups:delete ดังนี้
firebase firestore:backups:delete \
BACKUP
แทนที่ข้อมูลต่อไปนี้

กู้คืนข้อมูลจากข้อมูลสํารองของฐานข้อมูล

การดำเนินการกู้คืนจะเขียนข้อมูลจากข้อมูลสำรองไปยังฐานข้อมูล Cloud Firestore ใหม่

หากต้องการเริ่มการกู้คืน ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud
ใช้คำสั่ง gcloud firestore databases restore ดังนี้
gcloud firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
แทนที่ข้อมูลต่อไปนี้
  • PROJECT_ID: รหัสโปรเจ็กต์
  • LOCATION: ตำแหน่งของข้อมูลสำรองฐานข้อมูลและตำแหน่งของฐานข้อมูลใหม่ที่สร้างขึ้นสำหรับข้อมูลที่กู้คืน
  • BACKUP_ID: รหัสของข้อมูลสํารอง คุณสามารถดูรหัสของการสํารองข้อมูลแต่ละรายการเมื่อแสดงรายการสํารองข้อมูลทั้งหมด
  • DATABASE_ID: รหัสฐานข้อมูลสําหรับฐานข้อมูลใหม่ คุณใช้รหัสฐานข้อมูลที่มีคนใช้อยู่แล้วไม่ได้
เอาต์พุตจะมีคอมโพเนนต์ metadata, name และ response ดังนี้
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
  ...
ช่อง metadata มีคอมโพเนนต์ progressPercentage ซึ่งแสดงรายละเอียดความคืบหน้าโดยประมาณของการกู้คืนจนถึงตอนนี้ และ operationState ที่ระบุสถานะโดยรวมของการกู้คืน หากต้องการเรียกข้อมูลนี้อีกครั้ง ให้ใช้ gcloud firestore operations list ดังนี้
gcloud firestore operations list --database=DATABASE_ID
หรือใช้ช่อง name จากเอาต์พุตที่อธิบายไว้ด้านบนกับ gcloud firestore operations describe ดังนี้
gcloud firestore operations describe OPERATION_NAME
Firebase CLI
ใช้คำสั่ง firebase firestore:databases:restore ดังนี้
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
แทนที่ข้อมูลต่อไปนี้
  • BACKUP: ชื่อทรัพยากรแบบเต็มของข้อมูลสํารอง คุณสามารถดูชื่อของการสำรองข้อมูลแต่ละรายการเมื่อแสดงรายการการสำรองข้อมูลทั้งหมด
  • DATABASE_ID: รหัสฐานข้อมูลสําหรับฐานข้อมูลใหม่ คุณใช้รหัสฐานข้อมูลที่มีคนใช้อยู่แล้วไม่ได้