Postgres – point-in-time recovery (PITR) – Backup và restore dữ liệu trong Postgresql

,

・Published on:

Postgres hỗ trợ point-in-time recovery (PITR) — khả năng “quay ngược thời gian” để đưa cơ sở dữ liệu về trạng thái trước đó.

Tính năng này hoạt động nhờ kết hợp backup–restore và WAL replay.

Trước hết, Postgres cần có các bản backup định kỳ. Những bản backup này được dùng làm “nền tảng” cho PITR. Khi bắt đầu một quá trình khôi phục theo thời gian, ta sẽ khởi tạo một instance Postgres mới và phục hồi bản backup gần nhất và trước thời điểm muốn khôi phục.Điều này giúp ta tiến rất gần đến thời điểm cần khôi phục, nhưng vẫn có thể chậm vài giờ.

Từ đó, Postgres sẽ replay WAL (write-ahead log) — áp dụng lại toàn bộ insert, update, delete xảy ra từ lúc backup đến thời điểm cần khôi phục.

Postgres primary có thể được cấu hình để liên tục lưu trữ WAL lên một hệ thống như S3, và PITR sẽ lấy WAL từ đó để replay.

Ví dụ cụ thể:

Hôm nay là 24 tháng 11. Tôi muốn khôi phục về 23 tháng 11 lúc 5 giờ sáng. Tôi có backup hằng ngày vào lúc 1 giờ sáng và WAL được lưu liên tục trong vòng 48 giờ.

Để thực hiện PITR:

Tạo một Postgres server mới

Restore bản backup lúc 1 giờ sáng ngày 23 tháng 11Replay WAL từ 1 giờ → 5 giờ sáng

Và như vậy, bạn sẽ xem được trạng thái cơ sở dữ liệu chính xác tại thời điểm đó.