Postgresql không chấp nhận kết nối sao chép


19

Đồng bằng phát trực tuyến cũ. PostgreSQL: 9.2.7 Windows 8.1 64 bit

Các cụm chính và phụ của tôi nằm trên cùng một máy windows. Tôi đã thực hiện pg_start_backup () và mọi thứ, vì vậy cả hai nút có cùng một dữ liệu.

Bây giờ vấn đề với sao chép là "kết nối sao chép" từ máy chủ nô lệ không kết nối với máy chủ chính nhưng tôi có thể kết nối bằng cách sử dụng cùng một tham số bằng cách sử dụng shell psql. Những gì tôi nghĩ thủ phạm là chuỗi kết nối trong recovery.cs của nô lệ:

primary_conninfo = 'host = 127.0.0.1 port = 5432 user = postgres password = postgres'

Tôi đã thử localhost, 0.0.0.0, lan IP mọi thứ nhưng pg log nói:

 FATAL:  could not connect to the primary server: FATAL:  no pg_hba.conf entry for replication connection from host "127.0.0.1", user "postgres", SSL off

Bây giờ hãy xem pg_hba.conf của Master tôi:

host     all     all     0.0.0.0/0   trust
host    all             postgres             127.0.0.1/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 md5
hostnossl    all     postgres    127.0.0.1/32    trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

Giống như tôi cho phép mọi kết nối có thể nhưng nô lệ không thể kết nối. Bạn có thể giúp gì không?

Câu trả lời:


25

Tên cơ sở dữ liệu có được replicationnhư allkhông bao gồm kết nối sao chép.

host    replication    postgres             127.0.0.1/0               trust

Các tài liệu PostgreSQL tiếp tục nói:

Giá trị replicationxác định rằng bản ghi khớp với nếu một kết nối sao chép được yêu cầu (lưu ý rằng các kết nối sao chép không chỉ định bất kỳ cơ sở dữ liệu cụ thể nào). Mặt khác, đây là tên của một cơ sở dữ liệu PostgreSQL cụ thể. Nhiều tên cơ sở dữ liệu có thể được cung cấp bằng cách tách chúng bằng dấu phẩy. Một tệp riêng biệt chứa tên cơ sở dữ liệu có thể được chỉ định bằng cách đặt trước tên tệp với @.


chúng ta có cần tạo một cơ sở dữ liệu nhân rộng không? hoặc nó được xây dựng ??
gimibarak

Nó không sẵn sàng và bạn phải thiết lập sao chép. Đây là tài liệu tham khảo: digitalocean.com/community/tutorials/ từ
Sachin Verma

Lưu ý rằng đây không phải là trường hợp sao chép logic.
mlissner

3

Thêm dòng dưới đây pg_hba.confvà tải lại làm việc cho tôi. Xem xét loại là 'cục bộ', việc chỉ định rõ ràng một địa chỉ là không cần thiết.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

Và nhớ pg_ctl reload


2

Một giải pháp khả thi khác ở đây mà tôi gặp phải. Nếu bạn đang thực hiện sao chép logic và bạn đã cài đặt DATABASE thành sao chép, nó sẽ không hoạt động. Nó chỉ cần có được một tham số thông thường. Các replicationtham số là để nhân rộng vật lý, không sao chép logic.

Man, người đó đã mất một số công việc để tìm ra. Tôi hi vọng cái này giúp được!


1
Điều này cần phải được nâng cao hơn nữa. Tôi đã dành hàng giờ để khắc phục sự cố plugin wal2json cho đến khi tôi tìm thấy nó và đây là câu trả lời đúng cho tôi. Dường như plugin wal2json sử dụng sao chép logic, vì vậy để có được ví dụ lệnh pg_recvlogical của họ, tôi cần đặt pg_hba.conf để sử dụng tên cơ sở dữ liệu 'thử nghiệm' thay vì từ khóa 'sao chép'
Alf47
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.