2016-12-31 13 views
8

Tôi đang tìm cách thiết lập lịch biểu sao cho cơ sở dữ liệu dàn dựng của tôi luôn là bản sao cơ sở dữ liệu sản xuất của tôi và có bản sao xảy ra mỗi ngày một lần hoặc mỗi giờ một lần.Làm thế nào để lên lịch sao chép liên tục của cơ sở dữ liệu từ sản xuất đến dàn dựng trên Heroku?

Tôi biết rằng có một cách dễ dàng để thực hiện một bản sao một lần, sử dụng heroku pg:

heroku pg:copy SOURCE_APP::SOURCE_DATABASE DESTINATION_DATABASE --app DESTINATION_DATABASE 

Nhưng đó chỉ là một điều một lần.

Tôi cũng biết rằng thật dễ dàng để chạy các lệnh được lên lịch với bộ lập lịch Heroku, được chạy trong các dynos một lần. Nhưng các dynos không có Heroku Toolbelt được cài đặt trên chúng, do đó, heroku pg:copy không có sẵn.

Tôi đã cố gắng sử dụng pg_dump | pg_restore, nhưng tôi chạy vào một trong hai vấn đề:

Nếu không có hạn chế schema, nó không thành công bởi vì tôi không có đủ quyền hạn tôi nghĩ:

pg_restore: [archiver (db)] Error while PROCESSING TOC: 
pg_restore: [archiver (db)] Error from TOC entry 3205; 0 0 COMMENT EXTENSION plpgsql 
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql 
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; 

Với việc hạn chế pg_dump thành chỉ --schema=public, nó không thành công vì một số tiện ích phụ thuộc vào giản đồ công khai và chúng không bị loại bỏ.

pg_restore: [archiver (db)] Error while PROCESSING TOC: 
pg_restore: [archiver (db)] Error from TOC entry 9; 2615 16385 SCHEMA public Storm 
pg_restore: [archiver (db)] could not execute query: ERROR: cannot drop schema public because other objects depend on it 
DETAIL: extension citext depends on schema public 
extension pg_stat_statements depends on schema public 
HINT: Use DROP ... CASCADE to drop the dependent objects too. 
    Command was: DROP SCHEMA IF EXISTS public; 

Cách tốt nhất để làm điều này là gì?

Trả lời

2

Không có lý do tại sao bạn không thể tải xuống và cài đặt CLI trên dyno làm tiền thân cho mọi bản sao của cơ sở dữ liệu sản xuất.

Tất cả những gì bạn cần là tập lệnh trình bao để gọi từ trình lên lịch và để kịch bản lệnh cài đặt CLI và sử dụng các biến môi trường thích hợp để giữ thông tin xác thực được yêu cầu.

đơn giản quá trình hai bước ...

  1. Cài đặt CLI
  2. Sử dụng CLI để thực hiện bản sao của cơ sở dữ liệu

Trong thực tế, nó có thể là một ứng dụng độc lập mà không cần bất kỳ quy trình web hoặc nhân viên chạy nó.

Chúng tôi sử dụng phương pháp tương tự để chạy bản sao lưu của riêng mình và tải chúng lên thùng AWS S3, độc lập với bản sao lưu của riêng Heroku, vì vậy chúng tôi cài đặt cả Heroku và AWS CLI.

4

Bạn đã cân nhắc việc tạo người theo dõi cơ sở dữ liệu (còn gọi là cấu hình chính/phụ)? https://devcenter.heroku.com/articles/heroku-postgres-follower-databases

Điều này sẽ liên tục cập nhật cơ sở dữ liệu người theo dõi của bạn với dữ liệu từ sản xuất. Lưu ý rằng nếu bạn thay đổi dữ liệu trực tiếp trên cơ sở dữ liệu người theo dõi, điều đó sẽ không nhất thiết bị ghi đè, vì vậy, không chắc đó có phải là giải pháp khả thi cho những gì bạn cần hay không.

Các vấn đề liên quan