Estou trabalhando em um backup quente do Postgres 9.1 por um tempo e encontrei um problema consistente. Após reiniciar o Postgres no servidor escravo, o arquivo de log pgstartup e o arquivo de log diário no diretório pg_log são lidos sem erros. No entanto, quando tento entrar no banco de dados usando o comando psql, recebo o erro:
FATAL: o sistema de banco de dados está sendo inicializado.
O arquivo recovery.conf também não liga para recovery.done. Pesquisei extensivamente esse erro e encontrei consistentemente a mesma resposta: o banco de dados não foi desligado corretamente antes de tentar reiniciar o Postgres. A única maneira de reiniciar o Postgres é através dos comandos service postgresql-9.1 restart
ou /etc/init.d/postgresql-9.1 restart
. Depois de receber esse erro, eu mato todos os processos e tento reiniciar o banco de dados e ainda recebo o mesmo erro. Estou sem saber para onde ir e como corrigir esse problema. Abaixo está o processo exato que eu fiz para concluir o backup ativo.
Configurações do servidor principal:
pg_hba.conf, adicionou a linha:
replicação de host postgres IPAddressOfSlaveServer trust
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address = '*' port = 5432 max_wal_senders = 5 wal_keep_segments = 32
Configurações do servidor escravo:
postgresql.conf:
hot_standby = ativado
recovery.conf:
standby_mode = ativado primary_conninfo = host = IPAddressOfMasterServer port = 5432 usuário = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Depois de configurar os dois servidores
Mudo para o usuário do postgres no servidor principal e executo os comandos:
psql -c "Selecione 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 "selecione pg_stop_backup ();";
Após sincronizar o banco de dados com o servidor escravo
Eu reinicio o servidor escravo e a inicialização não falha. O pgstartup.log lê:
Sucesso. Agora você pode iniciar o servidor de banco de dados usando: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data ou /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start
o arquivo de log do dia atual, postgresql-Thu.log, lê:
Log: desligando Log: o sistema de banco de dados está desligado Log: o sistema de banco de dados foi encerrado em recuperação em 10/04/2012 Log: entrando no modo de espera Log: arquivo de log restaurado "logFileName" do arquivo Log: estado de recuperação consistente atingido em 0 / BF0000B0 Log: refazer começa em 0 / BF000020 Log: arquivo de log restaurado "logFileName" do arquivo Log: inesperado pageaddr 0/85000000 no arquivo de log 0, segmento 192, deslocamento 0 Log: inesperado pageaddr 0/85000000 no arquivo de log 0, segmento 192, deslocamento 0 Log: replicação de streaming conectada com êxito ao primário
Pesquisei pageaddr inesperado e, nos arquivos do postgres, entendo que é bastante normal e uma das maneiras esperadas de detectar o fim do WAL.
Qualquer conselho seria muito apreciado.
fonte
Curiosamente, eu resolvi isso da maneira oposta que Paulo fez.
Eu adicionei:
hot_standby = on
ou melhor, alterado
#hot_standby = off
para o acima. (Isso estava usando 9.5)fonte
Eu consegui isso nos logs:
Para corrigir o início infinito do servidor, faça o seguinte: Interrompa o serviço (se existir), interrompa o processo 'postgres' (normalmente existe). Execute isso no console:
Este uso aparece porque o diretório xLog possui dados que não são gravados antes do encerramento do serviço. E então, na inicialização do serviço, ele tenta consertar esses dados. Às vezes, congela a inicialização e nunca termina. Comando na limpeza desses dados não corrigidos, que aplicam o serviço para iniciar apenas com dados fixos. Talvez algumas partes dos dados não corrigidos sejam perdidas, mas o servidor de banco de dados será executado normalmente e poderá ser acessado por aplicativos.
fonte