Tôi đã làm việc trên một bản sao lưu nóng cho Postgres 9.1 trong một thời gian và đã gặp phải một vấn đề nhất quán. Sau khi khởi động lại Postgres trên máy chủ nô lệ, tệp nhật ký pgstartup và tệp nhật ký hàng ngày trong thư mục pg_log đọc không có lỗi. Tuy nhiên, khi tôi cố gắng nhập vào cơ sở dữ liệu bằng lệnh psql, tôi gặp lỗi:
FATAL: hệ thống cơ sở dữ liệu đang khởi động.
Tệp recovery.conf cũng không chuyển sang recovery.done. Tôi đã nghiên cứu rộng rãi lỗi này và luôn tìm thấy cùng một phản hồi: cơ sở dữ liệu chưa được tắt hoàn toàn trước khi tôi cố gắng khởi động lại Postgres. Cách duy nhất tôi đã khởi động lại Postgres là thông qua các lệnh service postgresql-9.1 restart
hoặc /etc/init.d/postgresql-9.1 restart
. Sau khi tôi nhận được lỗi này, tôi giết tất cả các quy trình và một lần nữa thử khởi động lại cơ sở dữ liệu và vẫn nhận được lỗi tương tự. Tôi không biết phải đi đâu từ đây và cách khắc phục vấn đề này. Dưới đây là quy trình chính xác mà tôi đã thực hiện để hoàn thành bản sao lưu nóng.
Cấu hình máy chủ chính:
pg_hba.conf, đã thêm dòng:
lưu trữ nhân rộng postgres IPAddressOfSlaveServer tin tưởng
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 nghe_address = '*' cổng = 5432 max_wal_senders = 5 wal_keep_segments = 32
Cấu hình máy chủ nô lệ:
postgresql.conf:
hot_standby = trên
recovery.conf:
chế độ chờ_mode = bật chính_conninfo = máy chủ = IPAddressOfMasterServer cổng = 5432 người dùng = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Sau khi cấu hình cả hai máy chủ
Tôi thay đổi người dùng postgres trên máy chủ chính và chạy các lệnh:
psql -c "Chọn pg_start_backup ('nhãn', true);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data nô lệ: /var/lib/pgsql/9.1/data \ --exclude postmaster.pid pssql -c "chọn pg_stop_backup ();";
Sau khi đồng bộ hóa cơ sở dữ liệu với máy chủ nô lệ
Tôi khởi động lại máy chủ nô lệ và khởi động không thất bại. Các pgstartup.log đọc:
Sự thành công. Bây giờ bạn có thể khởi động máy chủ cơ sở dữ liệu bằng cách sử dụng: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data hoặc là /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile bắt đầu
tệp nhật ký ngày hiện tại, postgresql-Thu.log, đọc:
Nhật ký: tắt Nhật ký: Hệ thống cơ sở dữ liệu bị tắt Nhật ký: hệ thống cơ sở dữ liệu đã ngừng hoạt động trong phục hồi 2012-4-10 Nhật ký: vào chế độ chờ Nhật ký: tệp nhật ký được khôi phục "logFileName" từ kho lưu trữ Nhật ký: trạng thái phục hồi nhất quán đạt 0 / BF0000B0 Đăng nhập: làm lại bắt đầu từ 0 / BF000020 Nhật ký: tệp nhật ký được khôi phục "logFileName" từ kho lưu trữ Nhật ký: pageaddr bất ngờ 0/85000000 trong tệp nhật ký 0, phân đoạn 192, bù 0 Nhật ký: pageaddr bất ngờ 0/85000000 trong tệp nhật ký 0, phân đoạn 192, bù 0 Nhật ký: sao chép phát trực tuyến kết nối thành công với chính
Tôi đã nghiên cứu pageaddr bất ngờ và từ kho lưu trữ của postgres, tôi hiểu rằng nó khá bình thường và là một trong những cách dự kiến để phát hiện end-of-WAL.
Bất kỳ lời khuyên sẽ được đánh giá rất cao.