Tôi đã nghĩ về những gì bạn đã viết và đây là một số ý tưởng dành cho bạn:
- Nếu bạn cần sao lưu thực sự nhất quán vào một thời điểm nào đó thì bạn phải sử dụng pg_basebackup hoặc pg_barman (nội bộ sử dụng pg_basebackup) - giải thích ở 1. liên kết bên dưới. Pg_basebackup mới nhất 10 luồng nhật ký WAL để bạn cũng sao lưu tất cả các thay đổi được thực hiện trong quá trình sao lưu. Tất nhiên, bản sao lưu này chỉ lấy toàn bộ phiên bản PG. Mặt khác, nó không khóa bất kỳ bảng nào. Và nếu bạn làm điều đó từ phiên bản từ xa thì nó chỉ gây ra tải CPU nhỏ trên phiên bản PG và IO đĩa không lớn như một số văn bản đề xuất. Xem liên kết 4 về kinh nghiệm của tôi. Việc khôi phục khá đơn giản - xem liên kết 5.
- Nếu bạn sử dụng pg_dump, bạn phải hiểu rằng bạn không có gì đảm bảo rằng bản sao lưu của bạn thực sự nhất quán về thời điểm - một lần nữa, hãy xem liên kết 1. Có thể sử dụng ảnh chụp nhanh của cơ sở dữ liệu (xem liên kết 2 và 3) nhưng ngay cả với nó, bạn không thể tin tưởng vào sự nhất quán 100%. Chúng tôi chỉ sử dụng pg_dump trên cơ sở dữ liệu phân tích của chúng tôi, chỉ tải 1x mới mỗi ngày (các phân vùng của các ngày trong năm từ cơ sở dữ liệu sản xuất). Bạn có thể tăng tốc nó với tùy chọn song song (chỉ hoạt động cho định dạng sao lưu thư mục). Nhưng nhược điểm là tải cao hơn nhiều trên phiên bản PG - sử dụng CPU cao hơn, IO đĩa cao hơn nhiều. Ngay cả khi bạn chạy pg_dump từ xa - trong trường hợp đó, bạn chỉ lưu IO đĩa để lưu các tệp sao lưu. Thêm vào đó, pg_dump cần đặt khóa đọc trên các bảng để nó có thể đối chiếu với các phần chèn mới hoặc với bản sao (khi thực hiện trên bản sao). Nhưng khi cơ sở dữ liệu của bạn đạt đến hàng trăm GB thì ngay cả kết xuất song song cũng có thể mất hàng giờ và trong thời điểm đó, bạn vẫn cần chuyển sang pg_basebackup.
- pg_barman là "phiên bản thoải mái" của pg_basebackup + nó cho phép bạn ngăn mất dữ liệu ngay cả khi phiên bản PG của bạn gặp sự cố rất nặng. Để nó hoạt động đòi hỏi nhiều thay đổi hơn nhưng nó chắc chắn đáng giá. Bạn sẽ phải thiết lập lưu trữ nhật ký WAL (xem liên kết 6) và nếu bạn PG <10, bạn sẽ phải đặt "max_wal_senders" và "max_replication_slots" (dù sao bạn cũng cần sao chép) - mọi thứ đều nằm trong hướng dẫn sử dụng pg-barman mặc dù mô tả không hẳn là tuyệt vời. pg_barman sẽ truyền phát và lưu trữ các bản ghi WAL ngay cả giữa các bản sao lưu, do đó, bằng cách này, bạn có thể chắc chắn rằng việc mất dữ liệu trong trường hợp sự cố rất nặng sẽ gần như không có. Nhưng làm cho nó hoạt động có thể mất nhiều giờ vì mô tả không chính xác tốt. pg-barman thực hiện cả sao lưu và khôi phục bằng các lệnh của nó.
Cơ sở dữ liệu của bạn lớn 5GB nên mọi phương pháp sao lưu sẽ nhanh chóng. Nhưng bạn phải quyết định xem bạn có cần khôi phục kịp thời và gần như không mất dữ liệu hay không - vì vậy nếu bạn có đầu tư thời gian để thiết lập pg-barman hay không.
Liên kết:
- PostgreSQL, Bản sao lưu và mọi thứ bạn cần biết
- Đánh giá cho Paper:14-Serializable Snapshot Isolation trong PostgreSQL - về ảnh chụp nhanh
- Kết xuất song song cơ sở dữ liệu - ví dụ về cách sử dụng ảnh chụp nhanh
- pg_basebackup thử nghiệm
- pg_basebackup - khôi phục bản sao lưu tar
- Lưu trữ nhật ký WAL bằng script