Restauração PITR do PostgreSQL

9

Tenho um servidor PostgreSQL 9.1 em execução no sistema operacional CentOS 5.8 de 32 bits e ativei o arquivamento WAL. Nesse servidor, existem três bancos de dados: databaseA, databaseB e databaseC. Alguém exclui uma tabela às 12 horas no banco de dadosB e eu quero restaurar o banco de dadosB antes da hora em que a tabela foi excluída. Agora são 15:00.

Como posso restaurar o banco de dados B até as 12 horas sem perder três horas de dados nos outros dois bancos de dados?

postgresql.conf

wal_level = archive             
archive_mode = on               
archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f'
max_wal_senders = 100

recovery.conf

restore_command = 'cp /opt/pgsql/logs/%f %p'
recovery_target_time = '2012-06-29 11:59:59 CEST'

Executei meu backup básico às 9h

pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup

O serviço PostgreSQL foi encerrado às 15:00.

Craig Efrein
fonte

Respostas:

6

Eu faria um ponto no tempo de recuperação em um local diferente, restaurando o tempo desejado e pg_dump no banco de dados do problema. Gostaria de soltar o banco de dados um no local normal, criá-lo novamente e carregar a saída pg_dump.

Certifique-se de criar e salvar uma cópia no nível do sistema de arquivos da árvore de diretórios de dados do cluster antes de iniciar algo assim.

kgrittn
fonte
Obrigado, +1 pela resposta. Você poderia adicionar as etapas necessárias para recuperar em um local diferente e depois restaurar usando pg_restore? Com sua resposta, estou pensando em usar o local de backup de base real para fazer o PITR.
Craig Efrein
0

Para expandir a resposta do kgrittn, você também pode executar pg_dumpapenas uma das tabelas que foram eliminadas e reconstruí-las no banco de dados existenteB, para não perder 6 horas de dados nas outras tabelas.

Aryeh Leib Taurog
fonte
obrigado por sua resposta, mas todas as várias restrições e relações entre as tabelas me impediriam de restaurar apenas uma.
Craig Efrein 06/07/12