Ok, tưởng tượng database của bạn giống như một kho lưu trữ sách khổng lồ với hàng ngàn cuốn sách. Backup đầy đủ là mỗi đêm gửi shipper đi copy toàn bộ sách. Nhưng nếu gần như chẳng có gì thay đổi thì sao? Cách này vừa chậm, vừa tốn tài nguyên vận chuyển và chiếm nhiều chỗ lưu trữ. Đó là lúc incremental và differential xuất hiện. Mình làm thông minh hơn, chỉ copy những gì thực sự thay đổi thôi.
Hôm nay tụi mình sẽ tìm hiểu các loại backup sau:
- Backup đầy đủ: sao lưu toàn bộ database.
- Backup incremental: chỉ sao lưu những thay đổi kể từ lần backup gần nhất.
- Backup differential: sao lưu những thay đổi kể từ lần backup đầy đủ gần nhất.
Mỗi phương pháp đều có ưu, nhược điểm và tình huống sử dụng riêng. Cùng đào sâu nhé.
Backup đầy đủ
Backup đầy đủ (Full Backup) là bản sao lưu toàn bộ database tại một thời điểm. Nó chứa cả cấu trúc database (bảng, index, schema) lẫn toàn bộ dữ liệu hiện có. Nói đơn giản, đây là "ảnh chụp nhanh" toàn bộ database.
Ví dụ lệnh backup đầy đủ:
pg_dump -U username -d database_name -F c -f full_backup.dump
Ở đây:
-U username— tên user PostgreSQL.-d database_name— tên database.-F c— định dạng backup (custom, tiện cho việc restore bằngpg_restore).-f full_backup.dump— tên file lưu bản backup.
Chi tiết về lệnh pg_dump và các tham số của nó tụi mình sẽ học ở các bài sau :P
Ưu điểm của backup đầy đủ:
- Dễ phục hồi. Nếu có gì đó toang, backup đầy đủ giúp khôi phục toàn bộ database nhanh chóng.
- Ảnh chụp toàn bộ dữ liệu. Có thể dùng để chuyển database sang server hoặc môi trường khác.
Nhược điểm của backup đầy đủ:
- Dung lượng lớn: backup đầy đủ có thể rất nặng, nhất là khi dữ liệu nhiều.
- Thời gian thực hiện lâu: càng nhiều dữ liệu thì càng lâu để backup.
- Tốn chỗ lưu trữ: mỗi bản backup đầy đủ chiếm riêng một phần dung lượng, có thể ngốn kha khá storage.
Khi nào nên dùng backup đầy đủ:
- Khi tạo bản backup đầu tiên.
- Trước khi thực hiện thay đổi lớn trong database.
- Để lưu trữ lâu dài (backup đầy đủ rồi gửi vào "kho lạnh").
Backup incremental
Backup incremental (Incremental Backup) chỉ lưu những file đã thay đổi kể từ lần backup gần nhất — có thể là backup đầy đủ hoặc incremental. Nhờ vậy tiết kiệm được kha khá dung lượng và backup cũng nhanh hơn.
Trong PostgreSQL, backup incremental có thể thực hiện bằng tool pgBackRest — một utility mạnh mẽ để tạo và quản lý backup PostgreSQL, hỗ trợ đầy đủ cả ba chiến lược backup.
pgBackRest hoạt động như nào?
pgBackRestdùng metadata và checksum file để xác định thay đổi.- Chỉ file thực sự thay đổi mới được đưa vào backup incremental.
- Hỗ trợ tự động archive file WAL, cho phép phục hồi tới thời điểm bất kỳ.
Ví dụ lệnh backup incremental:
pgbackrest --stanza=main --type=incr backup
Trong đó:
--stanza=main— tên cấu hình (bộ tham số cho DB cụ thể).--type=incr— chỉ định thực hiện backup incremental.
Trước khi backup incremental, nhất định phải có backup đầy đủ (--type=full) trước nhé.
Ưu điểm của backup incremental với pgBackRest:
- Tiết kiệm dung lượng: chỉ copy file đã thay đổi.
- Backup nhanh: nhất là khi thay đổi không nhiều.
- Quản lý WAL tự động: pgBackRest tự archive và áp dụng WAL file.
- Phục hồi linh hoạt: chọn được điểm phục hồi (PITR).
Nhược điểm và lưu ý:
- Cần cấu hình ban đầu: phải setup
stanza, repo, quyền truy cập. - Hơi khó cho newbie: cần hiểu về WAL và kiến trúc PostgreSQL.
- Phụ thuộc vào repo: tất cả backup lưu tập trung — phải quản lý storage cẩn thận.
Khi nào nên dùng backup incremental:
- Nếu database thay đổi thường xuyên.
- Khi backup đầy đủ quá nặng hoặc tốn thời gian.
- Khi muốn thiết lập chiến lược backup tự động, tin cậy, tiết kiệm tài nguyên.
Backup differential
Backup differential (Differential Backup) lưu lại tất cả thay đổi kể từ lần backup đầy đủ gần nhất. Khác với incremental, mỗi backup differential chứa toàn bộ thay đổi kể từ backup đầy đủ cuối cùng. Vì vậy, để phục hồi database, chỉ cần backup đầy đủ cuối cùng và backup differential cuối cùng.
Ví dụ quy trình:
- Tối đầu tiên: tạo backup đầy đủ (A).
- Tối thứ hai (B): tạo backup differential — chứa thay đổi từ A.
- Tối thứ ba (C): tạo backup differential — cũng chứa thay đổi từ A.
Ưu điểm:
- Dễ phục hồi: Chỉ cần backup đầy đủ và backup differential cuối cùng để phục hồi database.
- Nhanh hơn backup đầy đủ: Backup differential nhanh hơn backup đầy đủ vì chỉ copy phần thay đổi.
Nhược điểm:
- Kích thước file backup: Mỗi lần backup differential mới, file sẽ to dần vì chứa tất cả thay đổi từ lần backup đầy đủ.
- Tốn chỗ lưu trữ: Về lâu dài có thể tốn nhiều dung lượng hơn so với incremental.
Backup differential hữu ích khi bạn muốn đơn giản hóa việc phục hồi database: nó lưu mọi thay đổi kể từ lần backup đầy đủ gần nhất. Rất tiện nếu dữ liệu thay đổi thường xuyên, nhưng backup đầy đủ mỗi lần thì quá tốn thời gian hoặc tài nguyên. Trong trường hợp này, differential là giải pháp cân bằng giữa tốc độ và độ tin cậy.
So sánh các loại backup
| Loại backup | Đầy đủ | Incremental | Differential |
|---|---|---|---|
| Dung lượng dữ liệu | Lớn nhất | Nhỏ nhất | Trung bình |
| Thời gian thực hiện | Lâu | Nhanh | Vừa phải |
| Phục hồi | Dễ | Khó (phụ thuộc tất cả backup) | Trung bình (cần backup đầy đủ và differential cuối) |
| Khi nào dùng | Backup đầu tiên, migration | Backup thường xuyên, real-time | Backup định kỳ |
Chọn loại backup nào tuỳ vào yêu cầu bảo mật dữ liệu, tần suất cập nhật và tài nguyên bạn có. Database nhỏ thì backup đầy đủ thường xuyên là ổn. Nếu database lớn dần, incremental sẽ giúp tiết kiệm chỗ. Còn nếu bạn cần phục hồi nhanh, differential là lựa chọn hợp lý. Quan trọng nhất là backup đều đặn và tự động hóa nhé!
GO TO FULL VERSION