Bir süredir Postgres 9.1 için bir sıcak yedekleme üzerinde çalışıyorum ve tutarlı bir sorunla karşılaştım. Slave sunucusunda Postgres yeniden başlatıldıktan sonra, pgstartup günlük dosyası ve pg_log dizini altındaki günlük günlük dosyası hatasız okunur. Ancak, psql komutunu kullanarak veritabanına girmeye çalıştığımda hatayı alıyorum:
FATAL: veritabanı sistemi başlatılıyor.
Recovery.conf dosyası da recovery.done dosyasına dönmez. Bu hatayı kapsamlı bir şekilde araştırdım ve sürekli olarak aynı yanıtı buldum: Postgres'i yeniden başlatmayı denemeden önce veritabanı temiz bir şekilde kapatılmadı. Postgres'i yeniden başlatmamın tek yolu service postgresql-9.1 restartveya /etc/init.d/postgresql-9.1 restartkomutlarıdır. Bu hatayı aldıktan sonra, tüm işlemleri öldürürüm ve veritabanını yeniden başlatmayı dener ve yine aynı hatayı alırım. Buradan nereye gideceğimi ve bu sorunu nasıl çözeceğimi kaybettim. Aşağıda, sıcak yedeklemeyi tamamlamak için yaptığım tam işlem yer almaktadır.
Ana Sunucu Yapılandırmaları:
pg_hba.conf, satırı ekledi:
ana bilgisayar çoğaltma postgres IPAddressOfSlaveServer güven
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_adresi = '*' bağlantı noktası = 5432 max_wal_senders = 5 wal_keep_segments = 32
Bağımlı Sunucu Yapılandırmaları:
postgresql.conf:
hot_standby = açık
recovery.conf:
standby_mode = açık Primary_conninfo = Ana bilgisayar = IPAdresiOfMasterServer bağlantı noktası = 5432 kullanıcı = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Her iki sunucuyu yapılandırdıktan sonra
Ana sunucuda postgres kullanıcı olarak değiştirmek ve komutları çalıştırın:
psql -c "pg_start_backup ('label', true) 'u seçin;";
rsync -a -v -e ssh /var/lib/pgsql/9.1/data köle: /var/lib/pgsql/9.1/data \
- postmaster.pid adresini ekleyin
pgsql -c "select pg_stop_backup ();";
Veritabanını bağımlı sunucu ile senkronize ettikten sonra
Slave sunucuyu yeniden başlatıyorum ve başlatma başarısız. Pgstartup.log şunu okur:
Başarı. Artık veritabanı sunucusunu aşağıdakileri kullanarak başlatabilirsiniz:
/usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data
veya
/usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l günlük dosyası başlangıcı
geçerli günlüğün günlük dosyası olan postgresql-Thu.log şunu okur:
Günlük: kapatılıyor Günlük: Veritabanı sistemi kapalı Günlük: veritabanı sistemi 2012-4-10 kurtarma işleminde kapatıldı Günlük: bekleme moduna girme Günlük: arşivden geri yüklenen günlük dosyası "logFileName" Günlük: 0 / BF0000B0 değerinde tutarlı kurtarma durumuna ulaşıldı Günlük: yeniden başlatma 0 / BF000020'de başlar Günlük: arşivden geri yüklenen günlük dosyası "logFileName" Günlük: 0 günlük dosyasında beklenmeyen pageaddr 0/85000000, segment 192, ofset 0 Günlük: 0 günlük dosyasında beklenmeyen pageaddr 0/85000000, segment 192, ofset 0 Günlük: akış çoğaltması başarıyla birincil sunucuya bağlandı
Beklenmedik pageaddr'yi araştırdım ve postgres arşivlerinden, oldukça normal olduğunu ve WAL sonu tespit etmenin beklenen yollarından biri olduğunu düşünüyorum.
Herhangi bir tavsiye büyük mutluluk duyacağız.