Tự động sao lưu postgres


20

Cách tốt nhất để tự động sao lưu cơ sở dữ liệu Postgres trên Linux là gì?

Câu trả lời:


11

Bạn có thể sử dụng pg_dumpnhư thế này:

$ pg_dump -h db_host -U user_name db_name > dump_file.sql

Vui lòng suy nghĩ trước để đặt .pgpasstệp chứa mật khẩu sẽ được sử dụng nếu kết nối yêu cầu mật khẩu. Tập tin này nên có các dòng định dạng sau:

hostname:port:database:username:password

Và mỗi trong bốn trường đầu tiên có thể là một giá trị theo nghĩa đen, hoặc *, phù hợp với bất cứ điều gì. Ví dụ : *:*:*:postgres:pg_password.

Tập .pgpasstin này phải nằm trong thư mục chính ~ / và các quyền trên nó phải không cho phép mọi quyền truy cập vào thế giới hoặc nhóm; đạt được điều này bằng lệnh chmod 0600 ~/.pgpass.


nó tự động sao lưu hàng ngày ??
Anuj Patel

@indyaah: không, bạn sẽ phải chạy cái này hàng ngày từ cron (hoặc tương tự).
Bill Weiss

12

Chạy pg_dumpall từ cron.


7
pg_dumpall tốt hơn các câu trả lời khác vì điều này sao lưu các đối tượng cơ sở dữ liệu toàn cầu của bạn. (Ví dụ: người dùng, v.v.) Bạn sẽ cần những thứ này để khôi phục hoàn toàn DB của mình và nếu bạn có số lượng lớn trong số này thì việc này có thể không tầm thường để tạo lại chúng. Tuy nhiên, pg_dumpall có thể là quá mức cần thiết cho bạn nếu bạn chỉ muốn sao lưu một thể hiện cơ sở dữ liệu trong một cụm cơ sở dữ liệu vì pg_dumpall sẽ sao lưu mọi trường hợp. Vì vậy, ... như với hầu hết các câu hỏi và trả lời về công nghệ, nó phụ thuộc.
KevinRae

1
Tôi có xu hướng giới thiệu "cơ sở dữ liệu" và "máy chủ cơ sở dữ liệu", đây là một ví dụ tốt. Tôi cho rằng người đăng sẽ muốn sao lưu toàn bộ điểm Tốt.
Bill Weiss

6

Hãy dùng thử AutoPostgreQueryBackup . Nó là một tập lệnh duy nhất, có thể dễ dàng cấu hình theo nhu cầu của bạn, lập lịch hàng ngày, hàng tuần và hàng tháng, nhật ký cho mỗi email, tệp nhật ký hoặc thiết bị xuất chuẩn, v.v.


Tôi cũng sử dụng AutoPostgreQueryBackup và nó hoạt động rất tốt đối với tôi ;-)
Matthieu

4

Nếu đó là một cơ sở dữ liệu nhỏ một cách hợp lý và các yêu cầu thấp như vậy đối với bản sao lưu chỉ một lần một ngày, chỉ cần chạy pg_dump từ cron để chuyển sang tệp cục bộ, sau đó sử dụng bất cứ thứ gì bạn có để sao lưu các tệp trên máy để lưu trữ kết xuất .


4

pg_rman là một công cụ mới, cung cấp các bản sao lưu gia tăng, hoạt động cho PostgreQuery 8.4 hoặc mới hơn.


2

Hãy thử astrails an toàn . Nó biết cách sao lưu mysql (mysqldump), postgres (pg_dump) hoặc chỉ các tệp đơn giản (tar) bằng mã hóa (gnupg) và tải lên S3 / Sftp.



1

Đây là một tập lệnh sẽ sao lưu từng cơ sở dữ liệu riêng lẻ cũng như thông tin đăng nhập thường xuyên nhưng quan trọng của PostgreSQL GLOBALS và thông tin đăng nhập của người dùng.

Tầm quan trọng của việc này là tận dụng việc nén mà pg_dumpall không cung cấp và dữ liệu bị quên mà pg_dump bỏ qua.

Điều này sẽ yêu cầu một pgpass hoặc thiết lập tương tự như được mô tả ở đây http://wiki.postgresql.org/wiki/Pgpass

Đây là thiết lập cho OSX nhưng chỉ cần thay đổi đường dẫn Chương trình và nó sẽ hoạt động tốt.

Sao lưu lên / sqlbackups Tập lệnh sẽ trả về kích thước thư mục / thư mục và có các điểm dừng sẽ trả về trạng thái khác không nếu thất bại. Tôi đã sử dụng nó kết hợp với pgAgent để thực hiện sao lưu hàng ngày.

Script đã được xử lý lại, xin lỗi về điều đó :(


1

Tại sao ổn định với một bản sao lưu hàng ngày khi bạn có thể dễ dàng phục hồi tại thời điểm với barman ?


Tôi sẽ để người điều hành quyết định, nhưng tôi tin rằng việc hồi sinh những câu hỏi 5 năm tuổi để cắm các sản phẩm thương mại là hình thức xấu ở đây.
gparent


Bạn nói đúng, tôi đã hiểu sai. Mối quan tâm chính của tôi không phải là, dù sao, đó là về việc gợi ý một câu trả lời không thực sự là những gì người dùng đã hỏi 5 năm sau đó. Tuy nhiên, sau khi đọc các câu trả lời khác, họ dường như cũng đề xuất các giải pháp sao lưu tương tự nên tôi đoán nó không tệ. Cờ của tôi có thể sẽ bị từ chối và chúng tôi sẽ gọi nó là một ngày: D
gparent

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.