Làm cách nào để có bản sao lưu và kiểm tra DB PostgreQuery DB hoạt động và hoàn tất


45

Tôi đã hy vọng tôi có thể nhận được câu trả lời rõ ràng về cách đảm bảo thực hiện sao lưu toàn bộ Postgres giống như bạn nhận được với MS SQL Server, sau đó chăm sóc người dùng mồ côi.

Từ những gì tôi đã đọc và có thể sai, việc tìm kiếm một blog PostgreQuery tốt đã rất khó khăn, vì vậy xin vui lòng giới thiệu cho tôi một số, tôi cần tìm hiểu cách ứng dụng này hoạt động để tôi có thể tin tưởng vào các bản sao lưu và Slony của mình nhân rộng. Tôi đã có một nhà phát triển khôi phục lại một sao lưu tôi lấy từ PgadminIII qua custom, directorytarđịnh dạng trong khi lựa chọn OIDs nhưng ông cho biết hai trong số họ đã không tải, tarđã làm nhưng nó chỉ là thư mục, không phải là dữ liệu. Bây giờ tôi thực sự bối rối.

  1. Tôi đang sử dụng PGAdminIII, nó có một tùy chọn pg_dumppg_dumpall. Tôi muốn sao lưu mọi thứ mà tôi cần để kiểm tra khôi phục cơ sở dữ liệu này ở đâu đó và xác minh rằng có, tất cả dữ liệu chúng tôi cần và bản sao lưu của chúng tôi đều tốt. Cuối cùng, tôi muốn viết một kịch bản tự động khôi phục nhưng mỗi ngày một lần.

pg_dumpallrõ ràng có một -globalstùy chọn được cho là sao lưu mọi thứ, nhưng sự trợ giúp cho pg_dumpallthấy -g, --globals-only dump only global objects, no databases, không phải là một --globalstùy chọn.

Tôi nghĩ pg_dumpallít nhất sẽ sao lưu các khóa ngoại, nhưng thậm chí đó dường như là một 'tùy chọn'. Theo tài liệu , ngay cả khi pg_dumpalltôi cần sử dụng -otùy chọn để sao lưu khóa ngoại, tôi thực sự không thể tưởng tượng được khi nào tôi không muốn sao lưu khóa ngoại và điều này sẽ có ý nghĩa hơn như một tùy chọn mặc định.

  1. Làm thế nào tôi có thể chăm sóc người dùng mồ côi và xác nhận tôi có mọi thứ? Tôi thực sự muốn khôi phục tệp sao lưu của mình trên một máy chủ khác và xác minh mọi thứ hoạt động. Nếu bất cứ ai có bất kỳ đề xuất nào về cách sao lưu thực sự trong PostgreSQL và khôi phục, tôi sẽ rất biết ơn.

Tôi đã có một máy chủ PostgreSQL nhưng tôi vẫn không thể hiểu tại sao ứng dụng không sao lưu OIDs theo mặc định! Có vẻ như 99,9% thời gian bạn muốn điều đó.

CẬP NHẬT 1:

Tài liệu của Postgres đề cập rằng globalstùy chọn mà tôi đang tìm kiếm dường như là một tùy chọn mặc định trên phiên bản này, nhưng nó vẫn cần -otùy chọn này. Nếu ai đó có thể xác minh hoặc đưa cho tôi một lệnh ví dụ để khôi phục một cơ sở dữ liệu duy nhất ở nơi khác với mọi thứ nó cần, tôi sẽ đánh giá cao nó.

Chỉnh sửa: được yêu cầu bởi trang web để hiển thị tính duy nhất của câu hỏi này bằng cách chỉnh sửa câu hỏi của tôi. Câu hỏi này đặt ra vấn đề và nhận được sự rõ ràng về OID trong các bản sao lưu, sự khác biệt giữa toàn cầu và không toàn cầu, cũng như kiểm tra khôi phục các khuyến nghị để đảm bảo sao lưu tốt thay vì chỉ sao lưu. Do các câu trả lời, tôi đã có thể sao lưu, tìm ra toàn cầu / oids và bắt đầu quá trình khôi phục thử nghiệm hàng đêm trên Postgres bằng các công việc định kỳ. Cảm ơn đã giúp đỡ!


Câu trả lời:


58

Bạn có thể kết xuất toàn bộ cụm PostgreSQL bằng pg_dumpall. Đó là tất cả các cơ sở dữ liệu và tất cả các toàn cầu cho một cụm. Từ dòng lệnh trên máy chủ, tôi sẽ làm một cái gì đó như thế này. (Nghe của tôi trên cổng 5433, không phải trên cổng mặc định.) Bạn có thể hoặc không cần tùy chọn --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Điều này bao gồm toàn cầu - thông tin về người dùng và nhóm, không gian bảng, v.v.

Nếu tôi định sao lưu một cơ sở dữ liệu và chuyển nó sang một máy chủ cào , tôi sẽ kết xuất cơ sở dữ liệu với pg_dump và kết xuất toàn cầu với một trong hai

  • pg_dumpall --globals-only, hoặc là
  • pg_dumpall --roles-only (nếu bạn chỉ cần vai trò)

như thế này.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Đầu ra chỉ là tập tin văn bản.

Sau khi bạn di chuyển các tệp này sang một máy chủ khác, hãy tải toàn cục trước, sau đó kết xuất cơ sở dữ liệu.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Tôi nghĩ rằng pg_dumpall ít nhất sẽ sao lưu các khóa ngoại, nhưng thậm chí đó dường như là một 'tùy chọn'. Theo: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html ngay cả với pg_dumpall, tôi cần sử dụng tùy chọn -o để sao lưu khóa ngoại

Không, tham chiếu đó cho biết "Sử dụng tùy chọn này nếu ứng dụng của bạn tham chiếu các cột OID theo một cách nào đó (ví dụ: trong một ràng buộc khóa ngoài). Nếu không, không nên sử dụng tùy chọn này." (Nhấn mạnh thêm.) Tôi nghĩ rằng ứng dụng của bạn không tham chiếu các cột OID. Bạn không cần sử dụng tùy chọn này để "sao lưu khóa ngoại". (Đọc tệp kết xuất trong trình chỉnh sửa hoặc trình xem tệp của bạn.)


3
Không phải tên cơ sở dữ liệu bị thiếu trong dòng nơi sandbox.sql đang được nhập? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
16:00

Nó thấy rằng pg_dumpall, phiên bản 9.5, không hoạt động chính xác với NULLcác giá trị khi sử dụng COPY. Tôi gặp nhiều lỗi như thế này: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.Khi nhập trở lại Postgres 10 bằng cách sử dụngpsql -f /tmp/dumpall.sql
piotrekkr
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.