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

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

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

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

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

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

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

การสร้างหรือการเก็บรักษาข้อมูลสำรองจะไม่ส่งผลต่อประสิทธิภาพของการอ่านหรือ เขียนในฐานข้อมูลแบบสดของคุณ

ค่าใช้จ่าย

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

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

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

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

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

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

หากต้องการรับสิทธิ์ที่ต้องใช้ในการจัดการการสำรองข้อมูลและกำหนดเวลาการสำรองข้อมูล ให้ทำดังนี้ โปรดขอให้ผู้ดูแลระบบอนุญาต Identity and Access Management ดังต่อไปนี้อย่างน้อย 1 รายการ บทบาท:

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

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

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

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

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

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

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

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

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

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

  • DATABASE_ID: รหัสของฐานข้อมูลที่จะสำรองข้อมูล กำหนดเป็น '(default)' สำหรับฐานข้อมูลเริ่มต้น
  • RETENTION_PERIOD: ตั้งค่านี้เป็นค่าไม่เกิน 14 สัปดาห์ (14w)
Firebase CLI
หากต้องการสร้างกำหนดเวลาการสำรองข้อมูลรายวัน ให้ตั้งค่าสถานะ --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
หากต้องการสร้างกำหนดการดำเนินการสำรองข้อมูลรายสัปดาห์ ให้ตั้งค่าสถานะ --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
หากต้องการสร้างกำหนดการดำเนินการสำรองข้อมูลรายสัปดาห์ ให้ตั้งค่าสถานะ --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
โดยแทนที่ค่าต่อไปนี้
  • BACKUP_SCHEDULE: ชื่อทรัพยากรแบบเต็มของกำหนดการสำรองข้อมูล คุณ สามารถดูชื่อของกำหนดการสำรองข้อมูลแต่ละรายการเมื่อคุณ ระบุกำหนดการสำรองข้อมูลทั้งหมด
  • RETENTION_PERIOD: ตั้งค่านี้เป็นค่าไม่เกิน 14 สัปดาห์ (14w)

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

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

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

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)"
แฟล็ก --format="table(name, database, state)" จะจัดรูปแบบเอาต์พุตเป็น รูปแบบที่อ่านง่ายขึ้น หากต้องการแสดงเฉพาะข้อมูลสำรองจากตำแหน่งที่เจาะจง ให้ใช้แฟล็ก --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
หากต้องการแสดงเฉพาะข้อมูลสำรองจากตำแหน่งที่เจาะจง ให้ใช้แฟล็ก --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: รหัสฐานข้อมูลสำหรับ ฐานข้อมูล คุณจะใช้รหัสฐานข้อมูลที่ใช้งานอยู่แล้วไม่ได้