Ho lavorato su un backup caldo per Postgres 9.1 per un po 'e ho riscontrato un problema coerente. Dopo aver riavviato Postgres sul server slave, il file di registro pgstartup e il file di registro giornaliero nella directory pg_log vengono letti senza errori. Tuttavia, quando provo ad accedere al database usando il comando psql, ottengo l'errore:
FATAL: il sistema di database si sta avviando.
Anche il file recovery.conf non si trasforma in recovery.done. Ho studiato a fondo questo errore e trovo costantemente la stessa risposta: il database non è stato chiuso in modo pulito prima di provare a riavviare Postgres. L'unico modo in cui ho riavviato Postgres è tramite i comandi service postgresql-9.1 restart
o /etc/init.d/postgresql-9.1 restart
. Dopo aver ricevuto questo errore, interrompo tutti i processi e provo nuovamente a riavviare il database e ancora ricevo lo stesso errore. Sono a corto di dove andare da qui e come risolvere questo problema. Di seguito è riportato il processo esatto che ho fatto per completare il backup a caldo.
Configurazioni del server principale:
pg_hba.conf, ha aggiunto la riga:
replica host postgres Trust IPAddressOfSlaveServer
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 hear_address = '*' porta = 5432 max_wal_senders = 5 wal_keep_segments = 32
Configurazioni del server slave:
postgresql.conf:
hot_standby = attivo
recovery.conf:
standby_mode = on primary_conninfo = host = IPAddressOfMasterServer porta = 5432 utente = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Dopo aver configurato entrambi i server
Passo all'utente postgres sul server principale ed eseguo i comandi:
psql -c "Seleziona 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 "seleziona pg_stop_backup ();";
Dopo aver sincronizzato il database con il server slave
Riavvio del server slave e l'avvio non ha esito negativo. Il pgstartup.log recita:
Successo. È ora possibile avviare il server database utilizzando: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data o /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l inizio file di log
il file di registro del giorno corrente, postgresql-Thu.log, recita:
Registro: spegnimento Registro: il sistema di database è spento Registro: il sistema di database è stato chiuso in fase di ripristino nel 2012-4-10 Registro: accesso alla modalità standby Registro: file di registro "logFileName" ripristinato dall'archivio Registro: stato di recupero coerente raggiunto a 0 / BF0000B0 Registro: la ripetizione inizia da 0 / BF000020 Registro: file di registro "logFileName" ripristinato dall'archivio Registro: pageaddr imprevisto 0/85000000 nel file di registro 0, segmento 192, offset 0 Registro: pageaddr imprevisto 0/85000000 nel file di registro 0, segmento 192, offset 0 Log: replica dello streaming connessa correttamente al primario
Ho studiato pageaddr inaspettati e dagli archivi di Postgres, ho capito che è abbastanza normale e uno dei modi previsti per rilevare la fine del WAL.
Qualsiasi consiglio sarebbe molto apprezzato.