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.