Przez jakiś czas pracowałem nad gorącą kopią zapasową Postgres 9.1 i napotkałem spójny problem. Po ponownym uruchomieniu Postgres na serwerze podrzędnym plik dziennika pgstartup i dzienny plik dziennika w katalogu pg_log odczytują bez błędów. Jednak gdy próbuję wejść do bazy danych za pomocą polecenia psql, pojawia się błąd:
FATAL: system bazy danych uruchamia się.
Plik recovery.conf również nie przechodzi w tryb recovery.done. Dokładnie zbadałem ten błąd i konsekwentnie znajduję tę samą odpowiedź: baza danych nie została całkowicie zamknięta przed próbą ponownego uruchomienia Postgres. Jedynym sposobem, w jaki zrestartowałem Postgres, są polecenia service postgresql-9.1 restart
lub /etc/init.d/postgresql-9.1 restart
. Po otrzymaniu tego błędu zabijam wszystkie procesy i ponownie próbuję zrestartować bazę danych i nadal otrzymuję ten sam błąd. Brakuje mi gdzie mogę się udać i jak rozwiązać ten problem. Poniżej znajduje się dokładny proces, który wykonałem, aby zakończyć tworzenie kopii zapasowej na gorąco.
Konfiguracje serwera głównego:
pg_hba.conf, dodał wiersz:
replikacja hosta postgres Zaufanie do adresu IPAddressOfSlaveServer
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address = '*' port = 5432 max_wal_senders = 5 wal_keep_segments = 32
Konfiguracje serwera slave:
postgresql.conf:
hot_standby = wł
recovery.conf:
tryb czuwania = włączony primary_conninfo = host = IPAddressOfMasterServer port = 5432 użytkownik = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Po skonfigurowaniu obu serwerów
Przechodzę do użytkownika postgres na serwerze głównym i uruchamiam polecenia:
psql -c "Wybierz pg_start_backup ('label', true);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave: /var/lib/pgsql/9.1/data \ --Exclude postmaster.pid pgsql -c "wybierz pg_stop_backup ();";
Po zsynchronizowaniu bazy danych z serwerem slave
Ponownie uruchamiam serwer slave i uruchamianie nie kończy się niepowodzeniem. Plik pgstartup.log brzmi:
Sukces. Możesz teraz uruchomić serwer bazy danych, używając: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data lub /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l start pliku dziennika
plik dziennika bieżącego dnia, postgresql-Thu.log, brzmi:
Log: zamykanie Dziennik: system bazy danych jest zamknięty Dziennik: system bazy danych został zamknięty podczas odzyskiwania w dniu 2012-4-10 Rejestr: przejście w tryb gotowości Dziennik: przywrócono plik dziennika „logFileName” z archiwum Dziennik: spójny stan odzyskiwania osiągnięty przy 0 / BF0000B0 Dziennik: ponawianie rozpoczyna się od 0 / BF000020 Dziennik: przywrócono plik dziennika „logFileName” z archiwum Log: nieoczekiwany pageaddr 0/85000000 w pliku dziennika 0, segment 192, przesunięcie 0 Log: nieoczekiwany pageaddr 0/85000000 w pliku dziennika 0, segment 192, przesunięcie 0 Dziennik: replikacja strumieniowa pomyślnie połączona z podstawową
Badałem nieoczekiwany pageaddr iz archiwów postgres, rozumiem, że jest to całkiem normalne i jeden z oczekiwanych sposobów wykrywania końca WAL.
Wszelkie porady będą mile widziane.