Trên PostgreSQL v9.0 Tôi có một hệ thống lưu trữ WAL hoạt động. Vì vậy, WAL lưu trữ một quy định được lưu trữ (khi 3 WAL được tạo hoặc nếu WAL cũ hơn 15 phút).
Bây giờ tôi thêm một gói nhị phân của thư mục PG_DATA (không bao gồm thư mục con pg_xlog). Để làm điều đó tôi thực hiện một pg_start_backup(),
bản sao nhị phân, và a pg_stop_backup()
.
Tôi nghĩ rằng tôi hiểu khá rõ những gì pg_start_backup và pg_stop_backup đang làm, cái đầu tiên tạo một điểm kiểm tra và cái cuối cùng đảm bảo tệp WAL cuối cùng được lưu trữ.
Từ tài liệu chính thức, chúng ta có thể thấy rằng đối với bản sao dữ liệu nhị phân, chúng ta nên:
Thực hiện sao lưu, sử dụng bất kỳ công cụ sao lưu hệ thống tệp thuận tiện như tar hoặc cpio (không phải pg_dump hoặc pg_dumpall). Không cần thiết cũng không mong muốn dừng hoạt động bình thường của cơ sở dữ liệu trong khi bạn làm điều này.
Vì vậy, tôi khá bối rối. Điều này có nghĩa là một Điểm kiểm tra có thể được thực hiện trong khi chúng tôi tạo bản sao. Tôi đã thấy rất nhiều tài liệu nói rằng lệnh sao chép sẽ cho phép thay đổi dữ liệu trong khi thực hiện sao chép, tôi đồng ý với điều đó, đơn giản chỉ là vấn đề tìm kiếm công cụ phù hợp. Nhưng câu hỏi của tôi là làm thế nào postgreSQL sẽ xử lý phục hồi với nội dung pg_data chứa một số tệp không nhất quán (một số từ trước điểm kiểm tra, một số từ sau)?
Bằng cách phát lại nhật ký giao dịch Postgresql sẽ có thể đặt tất cả các tệp này vào đúng trạng thái? Tôi thấy rằng việc tạo bảng và thao tác thả là nguy hiểm trong khi sao lưu đang thực hiện, Không có một số thao tác nguy hiểm như lệnh chân không ? Có pg_backup đình chỉ hoạt động chân không? Tôi có nên tạo một bản sao của tệp toàn cầu / pg_control vào cuối quá trình sao chép nhị phân không? Tôi có nên sử dụng hệ thống tệp hỗ trợ ảnh chụp nhanh (như với đóng băng xfs) để có được quy trình khôi phục nhanh hơn không?
Tôi thấy rằng một sự cố kịch bản sao lưu sẽ không tự động khởi chạy pg_stop_backup, do đó, có khả năng trạng thái sao lưu của tôi tồn tại trong một thời gian dài (cho đến khi nagios của tôi gọi ai đó ở đâu đó để sửa pg_stop_backup ()). Vì vậy, nếu có bất cứ điều gì khác biệt trong PostgreQuery giữa hai đồng chí này tôi muốn biết, để hiểu tác động của nó có thể có.
Xin hãy soi sáng cho tôi.