Làm thế nào để thực hiện sao lưu gia tăng mỗi giờ trong Postgres?


18

Cố gắng thực hiện sao lưu gia tăng hàng giờ của một máy chủ Postgres (Win7 64).

Tôi có các thiết lập sau postgresql.conf:

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'

(khởi động lại)

Tôi đã thực hiện sao lưu cơ sở với pg_basebackup -U postgres -D ..\foo -F t -x

Nó tạo ra một base.tartệp lớn trong foothư mục và thêm một số tệp 16.384 KB, mà tôi giả sử là WALs.

Điều tôi không hiểu là tại sao WALs fookhông thay đổi . Các WAL data/pg_xlogthay đổi. Là pg không phải sao chép chúng hơn? Làm thế nào để nó quyết định làm như vậy?

Có lẽ tôi cần phải thiết lập archive_timeout=3600?

Tôi đã thấy một số trang web (danh sách gửi thư của pg, trang postgres của bacula) nói rằng bạn cần gọi pg_start_backup () và pg_stop_backup (), nhưng tôi tin rằng những điều đó là không bắt buộc. Điều đó có đúng không?

Câu hỏi phụ:

  1. Làm thế nào thường làm các WAL trong data/pg_xlogđược viết? Điều gì kích hoạt một bài viết?

    Nó dường như cập nhật WAL nếu tôi thực hiện một số DML sau đó \qtrong psql. Hoặc chỉnh sửa bảng trong pgAdmin sau đó đóng cửa sổ. Tôi hình dung nó sẽ viết trên cam kết.

  2. Thực hành tốt nhất? pg_basBackup mỗi tuần một lần? Lưu trữ WAL vào cùng một máy như PG hoặc máy từ xa?

Câu trả lời:


5

Bạn muốn thực hiện sao lưu gia tăng thư mục lưu trữ vào bộ lưu trữ từ xa.

Nếu bạn cần khôi phục từ bản sao lưu, kịch bản cơ bản là bạn cần sao lưu cơ sở làm điểm bắt đầu và toàn bộ nội dung của thư mục lưu trữ để phát lại hoạt động giao dịch xảy ra giữa điểm bắt đầu và sự cố.

Ngoài ra, để tránh việc các tệp trong thư mục lưu trữ chồng chất mãi mãi, bạn muốn thỉnh thoảng thực hiện sao lưu cơ sở mới và xóa các tệp được lưu trữ trước khi sao lưu cơ sở mới.


Cảm ơn. Một vài câu hỏi: 1. Tôi có làm pg_start_backup (), sao chép dữ liệu, sau đó chạy pg_stop_backup () hoặc pg_start_backup (); pg_stop_backup (), sau đó sao chép?
Neil McGuigan

@Neil: 1. và 2. không áp dụng khi bạn sử dụng pg_basebackup, nó đã xử lý vấn đề này. 3. postgres sẽ tự động xóa các tệp WAL pg_logkhi chúng không còn cần thiết. Bạn không nên làm bất cứ điều gì bằng tay trong pg_log. Nếu không, hãy xem wal_keep_segmentstham số
Daniel Vérité

bởi thư mục "archive", ý bạn là pg_xlog, đúng chứ?
Neil McGuigan

@NeilMcGuigan: hoàn toàn không. Thư mục lưu trữ là thư mục đích của lệnh lưu trữ của bạn, ví dụ ở đây "c: \ postgres \ foo". pg_xlogđược quản lý hoàn toàn tự động bởi postgres, trong khi thư mục lưu trữ hoàn toàn được quản lý bởi DBA.
Daniel Vérité

Tôi đoán tôi bối rối vì các WAL trong foo không bao giờ thay đổi sau pg_basBackup ban đầu
Neil McGuigan

8

Có một công cụ hiện có sẽ giúp bạn rất nhiều, WAL-E . Nó cung cấp một archive_commandrestore_command cho PITR đến S3.

Không lệnh để thực hiện sao lưu logic gia tăng hoặc vi sai .pg_dumpkhông thể tăng hoặc chênh lệch. Cách duy nhất để làm điều đó là thông qua lưu trữ nhật ký.

Về lý thuyết, bạn có thể có một bản sao lưu đầy đủ mới, thực hiện một khác biệt nhị phân giữa nó và bản sao lưu cuối cùng, và tải lên diff. Điều này gây ấn tượng với tôi như một cách mong manh và không hiệu quả để làm mọi thứ, và tôi thực sự không khuyến khích điều đó.

Ngoài ra, PGBarman hỗ trợ tích hợp với S3 thông qua các tập lệnh hook và sẽ tự động hóa phần lớn việc xoay vòng và quản lý dự phòng cho bạn. Một lần nữa, đây có thể không phải là một tùy chọn trên Windows.

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.