Cập nhật: Tôi đã đăng bài này lên các diễn đàn AWS - vui lòng truy cập và yêu cầu nó ở đó .
Tại thời điểm viết bài, Amazon RDS không hỗ trợ sao chép vật lý ngoài RDS. Bạn có thể GRANT
sử dụng REPLICATION
quyền sử dụng rds_superuser
thông tin đăng nhập, nhưng bạn không thể định cấu hình replication
các mục nhập cho các IP bên ngoài pg_hba.conf
.
Hơn nữa, khi bạn tạo một nhóm tham số DB trong RDS, một số tham số chính được hiển thị nhưng bị khóa, ví dụ: archive_command
bị khóa /etc/rds/dbbin/pgscripts/rds_wal_archive %p
. AWS RDS cho PostgreSQL dường như không hiển thị các WAL này cho truy cập bên ngoài (giả sử, thông qua S3) vì bạn sẽ cần phải sử dụng bản sao WAL-Shipping cho PITR bên ngoài.
Vì vậy, tại thời điểm này, nếu bạn muốn vận chuyển, đừng sử dụng RDS. Đó là một cơ sở dữ liệu dễ sử dụng đóng hộp, nhưng dễ sử dụng thường có nghĩa là nó cũng bị hạn chế, và đó chắc chắn là trường hợp ở đây. Như Joe Love chỉ ra trong các bình luận, nó cung cấp vận chuyển WAL và PITR trong RDS , nhưng bạn không thể truy cập vào WAL từ bên ngoài RDS.
Vì vậy, bạn cần sử dụng các phương tiện sao lưu riêng của RDS - bãi chứa, ảnh chụp nhanh và PITR dựa trên WAL của chính nó.
Ngay cả khi RDS đã cho phép bạn thực hiện các kết nối sao chép (cho pg_basebackup
hoặc phát trực tuyến sao chép) và cho phép bạn truy cập WAL đã lưu trữ, bạn có thể không thực sự sử dụng WAL đó. RDS chạy một PostgreQuery đã được vá, mặc dù không ai biết bản vá đó nặng đến mức nào hoặc liệu nó có làm thay đổi đáng kể định dạng trên đĩa hay không. Nó cũng chạy trên kiến trúc được chọn bởi Amazon, có lẽ là x64 Linux, nhưng không dễ xác định. Do định dạng và sao chép đĩa của PostgreQuery phụ thuộc vào kiến trúc, bạn chỉ có thể sao chép vào các máy chủ có cùng kiến trúc như Amazon RDS sử dụng và chỉ khi bản dựng PostgreQuery của bạn tương thích với chúng.
Trong số những điều khác, điều này có nghĩa là bạn không có cách nào dễ dàng để di chuyển khỏi RDS. Bạn sẽ phải dừng tất cả ghi vào cơ sở dữ liệu đủ lâu để thực hiện pg_dump
, khôi phục nó và chạy DB mới. Các thủ thuật thông thường với sao chép và chuyển đổi dự phòng, với rsync, v.v., sẽ không hoạt động vì bạn không có quyền truy cập trực tiếp vào máy chủ DB.
Ngay cả khi RDS chạy PostgreQuery chưa được vá, Amazon có thể sẽ không muốn cho phép bạn thực hiện WAL streaming vào RDS hoặc nhập vào RDS bằng pg_basebackup
lý do bảo mật. PostgreQuery coi thư mục dữ liệu là nội dung đáng tin cậy và nếu bạn đã tạo ra bất kỳ chức năng 'LANGUAGE c' thông minh nào có chức năng nội bộ hoặc thực hiện bất kỳ điều gì khó khăn khác, bạn có thể khai thác máy chủ để có quyền truy cập lớn hơn bạn nghĩ . Vì vậy, Amazon sẽ không cho phép WAL vào bất cứ lúc nào sớm.
Họ có thể hỗ trợ gửi WAL đi, nhưng các vấn đề trên với khả năng tương thích định dạng, tự do thực hiện thay đổi, v.v. vẫn được áp dụng.
Thay vào đó, bạn nên sử dụng một công cụ như Londiste hoặc Bucardo.