หน้านี้อธิบายวิธีใช้การกู้คืน ณ จุดเวลา (PITR) เพื่อเก็บรักษาและกู้คืนข้อมูลใน Cloud Firestore
หากต้องการทำความเข้าใจแนวคิด PITR โปรดดูการกู้คืนช่วงเวลา
สิทธิ์
หากต้องการรับสิทธิ์ที่จำเป็นในการจัดการการตั้งค่า PITR ให้ขอให้ผู้ดูแลระบบมอบบทบาท IAM ต่อไปนี้ในโปรเจ็กต์ที่คุณต้องการเปิดใช้ PITR
- เจ้าของ Cloud Datastore (
roles/datastore.owner
)
สำหรับบทบาทที่กำหนดเอง โปรดตรวจสอบว่าได้ให้สิทธิ์ต่อไปนี้
- หากต้องการเปิดใช้ PITR เมื่อสร้างฐานข้อมูล ให้ทำดังนี้
datastore.databases.create
- หากต้องการอัปเดตการตั้งค่า PITR ในฐานข้อมูลที่มีอยู่ ให้ทำดังนี้
datastore.databases.update
datastore.databases.list
- วิธีอ่านจากข้อมูล PITR:
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
- วิธีส่งออกข้อมูล PITR
datastore.databases.export
- วิธีนำเข้าข้อมูล PITR
datastore.databases.import
- วิธีโคลนฐานข้อมูล
datastore.databases.clone
ก่อนเริ่มต้น
โปรดทราบประเด็นต่อไปนี้ก่อนเริ่มใช้ PITR
- คุณจะเริ่มอ่านจาก 7 วันที่ผ่านมาไม่ได้ทันทีหลังจากเปิดใช้ PITR
- หากต้องการเปิดใช้ PITR เมื่อสร้างฐานข้อมูล คุณต้องใช้คำสั่ง
gcloud firestore databases create
ระบบไม่รองรับการเปิดใช้ PITR ขณะ สร้างฐานข้อมูลโดยใช้ Google Cloud Console - Cloud Firestore จะเริ่มเก็บรักษาเวอร์ชันนับจากจุดนั้นเป็นต้นไปหลังจาก เปิดใช้ PITR
- คุณจะอ่านข้อมูล PITR ในหน้าต่าง PITR ไม่ได้หลังจากปิดใช้ PITR
- หากเปิดใช้ PITR อีกครั้งทันทีหลังจากปิดใช้ ข้อมูล PITR ที่ผ่านมาจะใช้ไม่ได้อีกต่อไป ระบบจะลบข้อมูล PITR ที่สร้างขึ้นก่อนปิดใช้ PITR หลังจากวันที่ PITR หมดอายุ
- หากลบข้อมูลโดยไม่ตั้งใจในชั่วโมงที่ผ่านมาและปิดใช้ PITR คุณจะกู้คืนข้อมูลได้โดยการเปิดใช้ PITR ภายใน 1 ชั่วโมงหลังจากการลบ
- การอ่านข้อมูล PITR ที่หมดอายุจะล้มเหลว
เปิดใช้ PITR
ก่อนใช้ PITR ให้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud เฉพาะโปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินเท่านั้นที่ใช้ฟังก์ชัน PITR ได้
วิธีเปิดใช้ PITR สำหรับฐานข้อมูล
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกการกู้คืนจากภัยพิบัติ
คลิกแก้ไขเพื่อแก้ไขการตั้งค่า
เลือกช่องทําเครื่องหมายเปิดใช้การกู้คืน ณ จุดเวลา แล้วคลิกบันทึก
การเปิดใช้ PITR จะมีค่าใช้จ่ายในการจัดเก็บ ดูข้อมูลเพิ่มเติมได้ที่ราคา
หากต้องการปิดใช้ PITR ให้ยกเลิกการเลือกช่องทําเครื่องหมายเปิดใช้การกู้คืนช่วงเวลาจากหน้าการกู้คืนจากภัยพิบัติในคอนโซล Google Cloud
gcloud
เปิดใช้ PITR ในระหว่างการสร้างฐานข้อมูลด้วยคำสั่ง gcloud firestore databases create
และ --enable-ptir
ดังนี้
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--type=firestore-native\
--enable-pitr
แทนที่ค่าดังนี้
LOCATION
- ตำแหน่งที่คุณต้องการสร้างฐานข้อมูลDATABASE_ID
- ตั้งค่าเป็นรหัสฐานข้อมูล
คุณปิดใช้ PITR ได้โดยใช้คำสั่ง gcloud firestore databases update
ดังนี้
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
แทนที่ค่าดังนี้
DATABASE_ID
- ตั้งค่าเป็นรหัสฐานข้อมูลหรือ (ค่าเริ่มต้น)
รับระยะเวลาเก็บรักษาและเวลาของเวอร์ชันแรกสุด
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกการกู้คืนจากภัยพิบัติ
ในส่วนการตั้งค่า ให้จดระยะเวลาการเก็บรักษาและเวลาของเวอร์ชันแรกสุด
- ระยะเวลาเก็บรักษา: ระยะเวลาที่ Cloud Firestore เก็บรักษา ข้อมูลทุกเวอร์ชันของฐานข้อมูล ค่าจะเป็น 1 ชั่วโมงเมื่อปิดใช้ PITR และ 7 วันเมื่อเปิดใช้ PITR
- เวลาของเวอร์ชันที่เก่าที่สุด: การประทับเวลาที่เก่าที่สุดซึ่งสามารถอ่านข้อมูลเวอร์ชันเก่าในหน้าต่าง PITR ได้ ค่านี้จะได้รับการอัปเดตอย่างต่อเนื่อง โดย Cloud Firestore และจะล้าสมัยทันทีที่มีการค้นหา หากคุณใช้ค่านี้เพื่อกู้คืนข้อมูล โปรดคำนึงถึงเวลาตั้งแต่ ช่วงเวลาที่ทำการค้นหาค่าจนถึงช่วงเวลาที่คุณเริ่มการกู้คืน
- การกู้คืนช่วงเวลา: แสดง
Enabled
หากเปิดใช้ PITR หากปิดใช้ PITR คุณจะเห็นDisabled
gcloud
เรียกใช้คำสั่ง gcloud firestore databases describe ดังนี้
gcloud firestore databases describe --database=DATABASE_ID
แทนที่ DATABASE_ID
ด้วยรหัสฐานข้อมูลหรือ '(default)'
เอาต์พุตมีดังนี้
appEngineIntegrationMode: ENABLED
concurrencyMode: PESSIMISTIC
createTime: '2021-03-24T17:02:35.234Z'
deleteProtectionState: DELETE_PROTECTION_DISABLED
earliestVersionTime: '2023-06-12T16:17:25.222474Z'
etag: IIDayqOevv8CMNTvyNK4uv8C
keyPrefix: s
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
ที่
earliestVersionTime
: การประทับเวลาของข้อมูล PITR ที่เก่าที่สุดที่จัดเก็บไว้pointInTimeRecoveryEnablement
: แสดงPOINT_IN_TIME_RECOVERY_ENABLED
หากเปิดใช้ PITR หากปิดใช้ PITR คุณจะเห็นPOINT_IN_TIME_RECOVERY_DISABLED
หรือฟิลด์pointInTimeRecoveryEnablement
อาจไม่แสดงversionRetentionPeriod
: ระยะเวลาที่เก็บรักษาข้อมูล PITR เป็นมิลลิวินาที ค่านี้อาจเป็น 1 ชั่วโมงเมื่อปิดใช้ PITR หรือ 7 วันหากเปิดใช้ PITR
อ่านข้อมูล PITR
คุณอ่านข้อมูล PITR ได้โดยใช้ไลบรารีของไคลเอ็นต์, วิธีการ REST API หรือตัวเชื่อมต่อ Apache Beam ของ FirestoreIOไลบรารีของไคลเอ็นต์
Java
คุณต้องใช้ReadOnly
ธุรกรรมเพื่ออ่านข้อมูล PITR คุณระบุ readTime
ในการอ่านโดยตรงไม่ได้
ดูข้อมูลเพิ่มเติมได้ที่ธุรกรรมและการเขียนแบบเป็นกลุ่ม
Firestore firestore = …
TransactionOptions options =
TransactionOptions.createReadOnlyOptionsBuilder()
.setReadTime(
com.google.protobuf.Timestamp.newBuilder()
.setSeconds(1684098540L)
.setNanos(0))
.build();
ApiFuture<Void> futureTransaction = firestore.runTransaction(
transaction -> {
// Does a snapshot read document lookup
final DocumentSnapshot documentResult =
transaction.get(documentReference).get();
// Executes a snapshot read query
final QuerySnapshot queryResult =
transaction.get(query).get();
},
options);
// Blocks on transaction to complete
futureTransaction.get();
โหนด
คุณต้องใช้ReadOnly
ธุรกรรมเพื่ออ่านข้อมูล PITR คุณระบุ readTime
ในการอ่านโดยตรงไม่ได้
ดูข้อมูลเพิ่มเติมได้ที่ธุรกรรมและการเขียนแบบเป็นกลุ่ม
const documentSnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(documentRef),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
const querySnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(query),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
REST API
ระบบรองรับการอ่าน PITR ในCloud Firestoreเมธอดการอ่านทั้งหมด ซึ่งได้แก่ get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery และ partitionQuery
หากต้องการอ่านโดยใช้วิธี REST ให้ลองใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
ในคำขอเมธอดอ่าน ให้ส่งค่า
readTime
เป็นการประทับเวลา PITR ที่รองรับในเมธอดreadOptions
การประทับเวลา PITR อาจเป็นการประทับเวลาที่มีความแม่นยำระดับไมโครวินาทีภายในชั่วโมงที่ผ่านมา หรือการประทับเวลาแบบเต็มนาทีที่เกินชั่วโมงที่ผ่านมา แต่ต้องไม่เร็วกว่าearliestVersionTime
ใช้พารามิเตอร์
readTime
ร่วมกับเมธอดBeginTransaction
เป็นส่วนหนึ่งของReadOnly
ธุรกรรมสำหรับการอ่าน PITR หลายรายการ
Apache Beam
ใช้เครื่องมือเชื่อมต่อ Cloud FirestoreIO Apache Beam เพื่ออ่านหรือเขียนเอกสารในฐานข้อมูล Cloud Firestore ที่มีขนาดใหญ่ด้วย Dataflow
การอ่าน PITR ได้รับการรองรับในวิธีการอ่านต่อไปนี้ของCloud FirestoreIO Connector วิธีการอ่านเหล่านี้รองรับwithReadTime(@Nullable Instant readTime)
วิธีการที่คุณใช้สำหรับการอ่าน PITR
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
คุณใช้โค้ดต่อไปนี้กับโค้ดไปป์ไลน์ Dataflow ตัวอย่างสำหรับการดำเนินการอ่านหรือเขียนแบบกลุ่มได้ ตัวอย่างนี้ใช้วิธี withReadTime(@Nullable Instant readTime)
สำหรับการอ่าน PITR
Instant readTime = Instant.ofEpochSecond(1684098540L);
PCollection<Document> documents =
pipeline
.apply(Create.of(collectionId))
.apply(
new FilterDocumentsQuery(
firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
.apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
...
ดูรายการreadTime
ตัวอย่างทั้งหมดในไปป์ไลน์ Dataflow
ได้ที่ที่เก็บ GitHub
ส่งออกและนำเข้าจากข้อมูล PITR
คุณสามารถส่งออกฐานข้อมูลไปยัง Cloud Storage จากข้อมูล PITR
โดยใช้คำสั่ง gcloud firestore export
คุณสามารถส่งออกข้อมูล PITR ที่การประทับเวลาเป็นเวลาเต็มนาทีภายใน
7 วันที่ผ่านมา แต่ไม่เร็วกว่าวันที่ earliestVersionTime
หากข้อมูลไม่มีอยู่ที่การประทับเวลาที่ระบุอีกต่อไป การดำเนินการส่งออกจะล้มเหลว
การดำเนินการส่งออก PITR รองรับตัวกรองทั้งหมด รวมถึงการส่งออกเอกสารทั้งหมดและการส่งออกคอลเล็กชันที่เฉพาะเจาะจง
ส่งออกฐานข้อมูลโดยระบุพารามิเตอร์
snapshot-time
เป็นการประทับเวลาการกู้คืนที่เลือกgcloud
เรียกใช้คำสั่งต่อไปนี้เพื่อส่งออกฐานข้อมูลไปยังที่เก็บข้อมูล
gcloud firestore export gs://BUCKET_NAME_PATH \ --snapshot-time=PITR_TIMESTAMP \ --collection-ids=COLLECTION_IDS \ --namespace-ids=NAMESPACE_IDS
ที่
BUCKET_NAME_PATH
- ที่เก็บข้อมูล Cloud Storage ที่ถูกต้องพร้อมคำนำหน้าเส้นทางที่ไม่บังคับซึ่งจัดเก็บไฟล์ส่งออกPITR_TIMESTAMP
- การประทับเวลา PITR ที่มีความละเอียดระดับนาที เช่น2023-05-26T10:20:00.00Z
หรือ2023-10-19T10:30:00.00-07:00
COLLECTION_IDS
- รายการรหัสคอลเล็กชันหรือรหัสกลุ่มคอลเล็กชัน เช่น -'specific-collection-group1','specific-collection-group2'
NAMESPACE_IDS
- รายการรหัสเนมสเปซ เช่น -'customer','orders'
โปรดทราบประเด็นต่อไปนี้ก่อนส่งออกข้อมูล PITR
- ระบุการประทับเวลาในรูปแบบ RFC 3339
เช่น
2023-05-26T10:20:00.00Z
หรือ2023-10-19T10:30:00.00-07:00
- ตรวจสอบว่าการประทับเวลาที่คุณระบุเป็นการประทับเวลาแบบเต็มนาที
ภายใน 7 วันที่ผ่านมา แต่ไม่เร็วกว่า
earliestVersionTime
หากไม่มีข้อมูลที่ การประทับเวลาที่ระบุแล้ว ระบบจะสร้างข้อผิดพลาด การประทับเวลาต้องเป็นนาทีเต็ม แม้ว่าเวลาที่ระบุจะอยู่ในชั่วโมงที่ผ่านมาก็ตาม - ระบบจะไม่เรียกเก็บเงินจากการส่งออก PITR ที่ไม่สำเร็จ
นำเข้าไปยังฐานข้อมูล
ทำตามขั้นตอนในนำเข้าเอกสารทั้งหมดเพื่อนำเข้า ฐานข้อมูลที่ส่งออก หากมีเอกสารอยู่ในฐานข้อมูลแล้ว ระบบจะเขียนทับเอกสารนั้น
โคลนจากฐานข้อมูล
คุณสามารถโคลนฐานข้อมูลที่มีอยู่ ณ การประทับเวลาที่เลือกไปยังฐานข้อมูลใหม่ได้โดยทำดังนี้
ฐานข้อมูลที่โคลนคือฐานข้อมูลใหม่ที่จะสร้างในตำแหน่งเดียวกันกับฐานข้อมูลต้นทาง
หากต้องการโคลน Cloud Firestore จะใช้ข้อมูลการกู้คืน ณ จุดเวลา (PITR) ของฐานข้อมูลต้นทาง ฐานข้อมูลที่โคลนจะมีข้อมูลและดัชนีทั้งหมด
โดยค่าเริ่มต้น ระบบจะเข้ารหัสฐานข้อมูลที่โคลนในลักษณะเดียวกับฐานข้อมูลต้นทาง โดยใช้การเข้ารหัสเริ่มต้นของ Google หรือการเข้ารหัส CMEK คุณระบุประเภทการเข้ารหัสอื่นหรือใช้คีย์อื่นสำหรับการเข้ารหัส CMEK ได้
การประทับเวลามีความละเอียด 1 นาทีและระบุจุดเวลา ในอดีตในช่วงเวลาที่กำหนดโดยกรอบเวลา PITR ดังนี้
- หากเปิดใช้ PITR สำหรับฐานข้อมูล คุณจะเลือกนาทีใดก็ได้ในช่วง 7 วันที่ผ่านมา (หรือน้อยกว่านั้นหากเปิดใช้ PITR เมื่อไม่ถึง 7 วันที่ผ่านมา)
- หากไม่ได้เปิดใช้ PITR คุณจะเลือกนาทีใดก็ได้ในชั่วโมงที่ผ่านมา
- คุณสามารถตรวจสอบการประทับเวลาที่เก่าที่สุดที่เลือกได้ในคำอธิบายของฐานข้อมูล
คอนโซล
คอนโซล Firebase ไม่รองรับการโคลนฐานข้อมูล คุณใช้ วิธีการสำหรับ Google Cloud CLI เพื่อโคลนฐานข้อมูลได้
gcloud
ใช้คำสั่ง
gcloud alpha firestore databases clone
เพื่อโคลนฐานข้อมูล
gcloud alpha firestore databases clone \
--source-database='SOURCE_DATABASE_ID' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
แทนที่ค่าต่อไปนี้
SOURCE_DATABASE_ID: รหัสฐานข้อมูล ของฐานข้อมูลที่มีอยู่ซึ่งคุณต้องการโคลน
PITR_TIMESTAMP: a PITR timestamp in the RFC 3339 format, at minute granularity. เช่น
2025-06-01T10:20:00.00Z
หรือ2025-06-01T10:30:00.00-07:00
DESTINATION_DATABASE_ID: a รหัสฐานข้อมูล สำหรับฐานข้อมูลที่โคลนใหม่ รหัสฐานข้อมูลนี้ต้องไม่เชื่อมโยงกับฐานข้อมูลที่มีอยู่
ตัวอย่าง
gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db'
เปลี่ยนการกำหนดค่าการเข้ารหัสของฐานข้อมูลที่โคลน
โดยค่าเริ่มต้น ฐานข้อมูลที่โคลนจะมีค่ากำหนดการเข้ารหัสเดียวกันกับฐานข้อมูลต้นทาง หากต้องการเปลี่ยนการกำหนดค่าการเข้ารหัส ให้ใช้อาร์กิวเมนต์
--encryption-type
- (ค่าเริ่มต้น)
use-source-encryption
: ใช้การกำหนดค่าการเข้ารหัสเดียวกันกับฐานข้อมูลต้นทาง google-default-encryption
: ใช้การเข้ารหัสเริ่มต้นของ Googlecustomer-managed-encryption
: ใช้การเข้ารหัส CMEK ระบุ รหัสคีย์ ในอาร์กิวเมนต์--kms-key-name
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดค่าการเข้ารหัส CMEK สำหรับฐานข้อมูลที่โคลน
gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'