Việc chạy pg_dump trên db trực tiếp có tạo ra các bản sao lưu nhất quán không?


37

Tôi có cơ sở dữ liệu 3 GB liên tục được sửa đổi và tôi cần tạo bản sao lưu mà không cần dừng máy chủ (Postgres 8.3).

Pg_dump của tôi chạy trong 5 phút. Điều gì nếu dữ liệu được sửa đổi trong quá trình? Tôi có được sao lưu nhất quán không? Tôi không muốn tìm hiểu khi thảm họa xảy ra.

Tài liệu của Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html không nói gì về điều này.


4
Xin chào Roddick. Tôi đặc biệt khuyên bạn nên kiểm tra quá trình khôi phục của bạn trước khi xảy ra thảm họa. Thiết lập một máy khác và khôi phục bằng một trong các bản sao lưu của bạn để kiểm tra.
Derek Downey

Câu trả lời:


53

Từ hướng dẫn :

Nó tạo ra các bản sao lưu nhất quán ngay cả khi cơ sở dữ liệu đang được sử dụng đồng thời.

Vì vậy, có, bạn có thể tin tưởng vào bản sao lưu. Tất nhiên, đó là PostgreSQL, bạn có thể tin tưởng vào dữ liệu của mình trong PostgreSQL.


10
Tôi thực sự đã LOL khi tôi đọc "bạn có thể tin tưởng vào dữ liệu của mình trong PostgreSQL" :)
François Beausoleil

Một liên kết đến hướng dẫn sẽ là tốt đẹp
Pablo Fernandez

1
@PabloFernandez: Xong rồi!
Frank Heikens

1
Tuy nhiên, một bản sao lưu logic trên cơ sở dữ liệu trực tiếp sẽ khóa các bảng của bạn, đừng bỏ lỡ thông tin này. Có lẽ bạn sẽ tìm thấy một số lời khuyên sau: compose.com/articles/...
Tryp

Vì vậy, xin vui lòng những gì là buồn cười về điều đó? Tôi có nên ngừng sử dụng postgresql?
777Anon

12

pg_dump bắt đầu một giao dịch, tương tự như bất kỳ truy vấn chạy dài nào khác sẽ hoạt động. Sự đảm bảo tính nhất quán đến từ việc thực hiện MVCC . Các bãi chứa sẽ luôn luôn tự thống nhất trong các quy tắc.

Tất cả các phần mờ của MVCC đều xoay quanh những thứ như giao dịch CẬP NHẬT thứ tự nào được hiển thị cho các khách hàng khác và cách khóa được mua. pg_dump nghiêm ngặt về việc đặt hàng và có được một khóa đọc trên toàn bộ cơ sở dữ liệu để kết xuất nó. Đối với hầu hết mọi người, đó là những gì họ mong đợi và cơ chế được sử dụng không bao giờ gây ra bất kỳ rắc rối nào. Rủi ro đồng thời chính là các máy khách cố gắng thay đổi cấu trúc cơ sở dữ liệu sẽ bị chặn trong khi kết xuất đang chạy. Điều đó không ảnh hưởng đến chất lượng của bãi rác.


11

Các bãi chứa bắt đầu với thiết lập TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Vui lòng đọc hướng dẫn về Cách ly giao dịch và ví dụ như thảo luận về Danh sách người dùng về việc này .

Trích dẫn:

Sao lưu sẽ chỉ thấy các giao dịch đã được cam kết trước khi mức cô lập được đặt.

Về cơ bản tất cả mọi thứ sau khi pg_dumpbộ giao dịch mức cô lập là không một phần của bãi này.

Các hoạt động đọc / ghi không bị ảnh hưởng (bị khóa) trong thời gian đó.


-1

Đầu tiên xin lỗi vì đã trả lời về chủ đề cũ này. Nhưng từ kinh nghiệm của tôi, tôi không thể xác nhận tuyên bố rằng bạn có thể tin tưởng pg_dump /

Tôi đã chuyển đổi một tháng trước cho một dự án để postgres. Và tất nhiên tôi đã thực hiện tất cả các bản sao lưu với pg_dump từ hệ thống trực tiếp như đề xuất. Nhưng sau lần kiểm tra dự phòng đầu tiên, tôi phát hiện ra rằng tất cả các bãi chứa có kích cỡ khác nhau. Sau khi khôi phục ngẫu nhiên một số trong số chúng, tôi phát hiện ra rằng một số bảng bị thiếu. Vì vậy, tôi bắt đầu phân tích lý do tại sao điều này xảy ra và tôi nhận ra rằng nếu ứng dụng lớp phủ, ví dụ: máy chủ ứng dụng, việc khóa một số bảng và pg_dump không chờ đợi cho đến khi chúng được phát hành. Tôi cần mỗi lần dừng máy chủ trong thời gian sao lưu không phải là giải pháp tốt.

Vì vậy, tôi vẫn đang tìm cách khắc phục nhưng như tôi đã nói, tôi không đồng ý với tuyên bố rằng bạn có thể tin tưởng pg_dump.


Nếu điều đó xảy ra, nó sẽ là một vấn đề nghiêm trọng trong pg_dump. Phiên bản nào bạn đang sử dụng? Câu hỏi của tôi là 3 năm trước, và bây giờ tôi đang ở trên 9.3 và Amazon màu đỏ có sao lưu trực tiếp rõ ràng bằng cách sử dụng pg_dump. Họ không thể sai được.
La Mã

Bạn có thể tin tưởng pg_dump để thực hiện sao lưu nối tiếp (xem câu trả lời của tôi cho các liên kết / tài liệu và một vài chi tiết) Tuy nhiên trong các bài đọc của tôi, tôi đã đọc rằng bạn không nên thay đổi cấu trúc của chính DB, mặc dù tôi không thể tìm hiểu sâu hơn về điều đó . Vì chúng tôi chỉ thực hiện chèn / cập nhật / xóa nên tôi không thể nhận xét về sáng tạo bảng. Đối với chúng tôi, tôi chỉ đảm bảo không tạo bảng trong thời gian pg_dump.
Dennis Nolte

2
Các báo cáo của bạn chỉ ra một lỗi nghiêm trọng (bạn đã nộp báo cáo lỗi chưa?), Một lỗi nghiêm trọng trong cách bạn kết xuất cơ sở dữ liệu của mình hoặc một số hiểu lầm. Thiếu bất kỳ sự thật người ta không thể quyết định trong số này.
dezso
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.