Trang này mô tả cách sử dụng tính năng khôi phục tại một thời điểm (PITR) để giữ lại và khôi phục dữ liệu trong Cloud Firestore.
Để tìm hiểu các khái niệm về PITR, hãy xem bài viết Khôi phục tại một thời điểm.
Quyền
Để có các quyền cần thiết để quản lý chế độ cài đặt PITR, hãy yêu cầu quản trị viên cấp cho bạn các vai trò IAM sau đây trên dự án mà bạn muốn bật PITR:
- Cloud Datastore Owner (
roles/datastore.owner
)
Đối với vai trò tuỳ chỉnh, hãy đảm bảo rằng bạn đã cấp các quyền sau đây:
- Cách bật PITR khi tạo cơ sở dữ liệu:
datastore.databases.create
- Cách cập nhật chế độ cài đặt PITR trên cơ sở dữ liệu hiện có:
datastore.databases.update
,datastore.databases.list
- Để thực hiện đọc dữ liệu PITR:
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
- Cách xuất dữ liệu PITR:
datastore.databases.export
- Cách nhập dữ liệu PITR:
datastore.databases.import
Trước khi bắt đầu
Hãy lưu ý những điểm sau trước khi bạn bắt đầu sử dụng PITR:
- Bạn không thể bắt đầu đọc từ 7 ngày trước ngay sau khi bật tính năng PITR.
- Nếu muốn bật PITR khi tạo cơ sở dữ liệu, bạn phải sử dụng lệnh
gcloud firestore databases create
. Không hỗ trợ bật PITR trong khi tạo cơ sở dữ liệu bằng bảng điều khiển Google Cloud. - Cloud Firestore bắt đầu giữ lại các phiên bản từ thời điểm đó trở đi sau khi bật tính năng PITR.
- Bạn không thể đọc dữ liệu PITR trong cửa sổ PITR sau khi tắt PITR.
- Nếu bạn bật lại PITR ngay sau khi tắt, dữ liệu PITR trước đó sẽ không còn nữa. Mọi dữ liệu PITR được tạo trước khi tắt PITR sẽ bị xoá sau ngày hết hạn của PITR.
- Nếu vô tình xoá dữ liệu trong 1 giờ qua và PITR bị tắt, bạn có thể khôi phục dữ liệu bằng cách bật PITR trong vòng 1 giờ kể từ khi xoá.
- Mọi thao tác đọc được thực hiện trên dữ liệu PITR đã hết hạn đều không thành công.
Bật PITR
Trước khi sử dụng PITR, hãy bật tính năng thanh toán cho dự án Google Cloud. Chỉ những dự án trên Google Cloud đã bật tính năng thanh toán mới có thể sử dụng chức năng PITR.
Cách bật tính năng sao lưu theo yêu cầu cho cơ sở dữ liệu:
Bảng điều khiển
Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).
Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.
Trong trình đơn điều hướng, hãy nhấp vào Khôi phục sau sự cố.
Nhấp vào Chỉnh sửa để chỉnh sửa chế độ cài đặt.
Chọn hộp đánh dấu Bật tính năng khôi phục tại một thời điểm, sau đó nhấp vào Lưu.
Việc bật tính năng sao lưu theo yêu cầu sẽ phát sinh chi phí lưu trữ. Hãy xem phần Giá để biết thêm thông tin.
Để tắt tính năng PITR, hãy bỏ đánh dấu hộp đánh dấu Bật tính năng khôi phục về một thời điểm nhất định trên trang Khôi phục sau sự cố trong Google Cloud Console.
gcloud
Bật PITR trong quá trình tạo cơ sở dữ liệu bằng lệnh gcloud firestore databases create
như sau:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Thay thế các giá trị như sau:
Location
– vị trí bạn muốn tạo cơ sở dữ liệu.DATABASE_ID
– đặt thành mã cơ sở dữ liệu hoặc (mặc định).TYPE
– được đặt thành Firestore-native.
Bạn có thể tắt tính năng sao lưu theo yêu cầu bằng lệnh gcloud firestore databases update
như sau:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
Thay thế các giá trị như sau:
DATABASE_ID
– đặt thành mã cơ sở dữ liệu hoặc (mặc định).
Xem khoảng thời gian lưu giữ và thời gian sử dụng phiên bản sớm nhất
Bảng điều khiển
Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).
Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.
Trong trình đơn điều hướng, hãy nhấp vào Khôi phục sau thảm hoạ.
Trong phần Cài đặt, hãy lưu ý Khoảng thời gian lưu giữ và Thời gian phiên bản sớm nhất.
- Khoảng thời gian lưu giữ: khoảng thời gian mà Cloud Firestore lưu giữ mọi phiên bản dữ liệu cho cơ sở dữ liệu. Giá trị này là một giờ khi tính năng sao lưu theo yêu cầu bị tắt và là 7 ngày khi tính năng sao lưu theo yêu cầu được bật.
- Thời gian phiên bản sớm nhất: dấu thời gian sớm nhất mà bạn có thể đọc các phiên bản cũ của dữ liệu trong cửa sổ PITR. Giá trị này liên tục được Cloud Firestore cập nhật và trở nên lỗi thời ngay khi được truy vấn. Nếu bạn đang sử dụng giá trị này để khôi phục dữ liệu, hãy nhớ tính đến thời gian từ lúc giá trị được truy vấn đến lúc bạn bắt đầu khôi phục.
- Khôi phục tại thời điểm: hiển thị
Enabled
, nếu PITR được bật. Nếu PITR bị tắt, bạn sẽ thấyDisabled
.
gcloud
Chạy lệnh gcloud firestore databases describe như sau:
gcloud firestore databases describe --database=DATABASE_ID
Thay thế DATABASE_ID
bằng mã cơ sở dữ liệu hoặc default
.
Dưới đây là kết quả:
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/(default)
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
trong đó,
earliestVersionTime
– dấu thời gian của dữ liệu PITR sớm nhất được lưu trữ.pointInTimeRecoveryEnablement
: hiển thịPOINT_IN_TIME_RECOVERY_ENABLED
nếu bạn bật tính năng PITR. Nếu PITR bị tắt, bạn sẽ thấyPOINT_IN_TIME_RECOVERY_DISABLED
hoặc trườngpointInTimeRecoveryEnablement
có thể không xuất hiện.versionRetentionPeriod
– khoảng thời gian lưu giữ dữ liệu PITR tính bằng mili giây. Giá trị có thể là một giờ khi PITR được tắt hoặc bảy ngày nếu PITR được bật.
Đọc dữ liệu PITR
Bạn có thể đọc dữ liệu PITR bằng cách sử dụng thư viện ứng dụng, phương thức API REST hoặc trình kết nối FirestoreIO Apache Beam.
Thư viện ứng dụng
Java
Bạn phải sử dụng giao dịch ReadOnly
để đọc dữ liệu PITR. Bạn không thể chỉ định trực tiếp readTime
trong lượt đọc.
Hãy xem Giao dịch và ghi theo lô để biết thêm thông tin.
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();
Nút
Bạn phải sử dụng giao dịch ReadOnly
để đọc dữ liệu PITR. Bạn không thể chỉ định trực tiếp readTime
trong các lượt đọc.
Hãy xem phần Giao dịch và ghi hàng loạt để biết thêm thông tin.
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)}
)
API REST
Hoạt động đọc PITR được hỗ trợ trong tất cả các phương thức đọc Cloud Firestore, bao gồm get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery và partitionQuery.
Để thực hiện thao tác đọc bằng các phương thức REST, hãy thử một trong các cách sau:
Trong yêu cầu phương thức đọc, hãy truyền giá trị
readTime
dưới dạng dấu thời gian PITR được hỗ trợ trong phương thứcreadOptions
. Dấu thời gian PITR có thể là dấu thời gian chính xác đến micro giây trong vòng một giờ qua hoặc dấu thời gian chính xác đến phút trong vòng một giờ qua, nhưng không sớm hơnearliestVersionTime
.Sử dụng tham số
readTime
cùng với phương thứcBeginTransaction
trong một giao dịchReadOnly
cho nhiều lượt đọc PITR.
Tia Apache
Sử dụng trình kết nối Apache Beam Cloud FirestoreIO để đọc hoặc ghi tài liệu trong cơ sở dữ liệu Cloud Firestore trên quy mô lớn bằng Dataflow.
Số lần đọc PITR được hỗ trợ trong phương thức đọc sau đây của trình kết nối Cloud FirestoreIO. Các phương thức đọc này hỗ trợ phương thức withReadTime(@Nullable Instant readTime)
mà bạn có thể sử dụng cho các lần đọc PITR:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Bạn có thể sử dụng mã sau đây với mã quy trình Dataflow mẫu cho các thao tác đọc hoặc ghi hàng loạt. Ví dụ này sử dụng phương thức withReadTime(@Nullable Instant readTime)
cho các lượt đọc 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())
...
Để biết danh sách đầy đủ các ví dụ về readTime
trong quy trình Dataflow, hãy xem kho lưu trữ GitHub.
Xuất và nhập từ dữ liệu PITR
Bạn có thể xuất cơ sở dữ liệu của mình sang Cloud Storage từ dữ liệu PITR bằng lệnh gcloud firestore export
. Bạn có thể xuất dữ liệu PITR, trong đó dấu thời gian là một dấu thời gian toàn bộ phút trong vòng 7 ngày qua, nhưng không sớm hơn earliestVersionTime
. Nếu dữ liệu không còn tồn tại tại dấu thời gian đã chỉ định, thì thao tác xuất sẽ không thành công.
Thao tác xuất PITR hỗ trợ tất cả bộ lọc, bao gồm cả việc xuất tất cả tài liệu và xuất các bộ sưu tập cụ thể.
Xuất cơ sở dữ liệu, chỉ định tham số
snapshot-time
thành dấu thời gian khôi phục mong muốn.gcloud
Chạy lệnh sau để xuất cơ sở dữ liệu vào bộ chứa của bạn.
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP] \ --collection-ids=[COLLECTION_IDS] \ --namespace-ids=[NAMESPACE_IDS]
Ở đâu,
BUCKET_NAME_PATH
– một bộ chứa Cloud Storage hợp lệ có tiền tố đường dẫn không bắt buộc, nơi lưu trữ các tệp xuất.PITR_TIMESTAMP
– dấu thời gian PITR ở mức độ chi tiết là phút, ví dụ:2023-05-26T10:20:00.00Z
hoặc2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
– danh sách mã bộ sưu tập hoặc mã nhóm bộ sưu tập, ví dụ:'specific collection group1'
,'specific collection group2'
.NAMESPACE_IDS
– danh sách mã nhận dạng không gian tên, ví dụ:'customer'
,'orders'
.
Hãy lưu ý những điểm sau trước khi xuất dữ liệu PITR:
- Chỉ định dấu thời gian theo định dạng RFC 3339.
Ví dụ:
2023-05-26T10:20:00.00Z
hoặc2023-10-19T10:30:00.00-07:00
. - Đảm bảo rằng dấu thời gian bạn chỉ định là dấu thời gian theo phút trong vòng 7 ngày qua, nhưng không sớm hơn
earliestVersionTime
. Nếu dữ liệu không còn tồn tại tại dấu thời gian đã chỉ định, lỗi sẽ được tạo. Dấu thời gian phải là một phút nguyên, ngay cả khi thời gian được chỉ định nằm trong vòng một giờ qua. - Bạn sẽ không bị tính phí cho lượt xuất dữ liệu PITR không thành công.
Nhập vào cơ sở dữ liệu.
Hãy làm theo các bước trong phần Nhập tất cả tài liệu để nhập cơ sở dữ liệu đã xuất. Nếu có bất kỳ tài liệu nào đã tồn tại trong cơ sở dữ liệu, tài liệu đó sẽ bị ghi đè.