A execução de pg_dump no db ativo produz backups consistentes?


37

Eu tenho um banco de dados de 3 GB que é constantemente modificado e preciso fazer backups sem interromper o servidor (Postgres 8.3).

Meu pg_dump é executado por 5 minutos. E se os dados forem modificados durante o processo? Eu recebo backups consistentes? Não quero descobrir quando ocorrer um desastre.

A documentação do Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html não diz nada sobre isso.


4
Oi Roddick. Eu recomendo testar seu processo de restauração antes do desastre. Configure uma máquina diferente e restaure usando um de seus backups para testá-lo.
Derek Downey

Respostas:


53

Do manual :

Faz backups consistentes, mesmo que o banco de dados esteja sendo usado simultaneamente.

Então, sim, você pode confiar no backup. Obviamente, é o PostgreSQL, você pode confiar nos seus dados no PostgreSQL.


10
Eu literalmente LOL'D quando li "você pode confiar seus dados em PostgreSQL" :)
François Beausoleil

Um link para o manual seria bom
Pablo Fernandez

11
@PabloFernandez: Feito!
22414 Frank Heikens

11
No entanto, um backup lógico em um banco de dados ativo bloqueará suas tabelas, não perca essas informações. Talvez você encontre algumas dicas: compose.com/articles/…
tryp

Então, por favor, o que há de tão engraçado nisso? Devo parar de usar o postgresql?
777Anon

12

O pg_dump inicia uma transação, da mesma forma que qualquer outra consulta de execução longa funcionará. As garantias de consistência vêm da implementação do MVCC . O despejo sempre será autoconsistente dentro dessas regras.

Todas as partes difusas do MVCC estão relacionadas a coisas como a ordem em que as transações UPDATE se tornam visíveis para outros clientes e como os bloqueios são adquiridos. O pg_dump é rigoroso quanto à compra e adquire um bloqueio de leitura em todo o banco de dados para despejá-lo. Para a maioria das pessoas, é o que elas esperam, e o mecanismo usado nunca causa problemas. O principal risco de simultaneidade é que os clientes que tentam alterar a estrutura do banco de dados serão bloqueados enquanto o dump estiver em execução. Isso não afeta a qualidade do despejo.


11

O despejo começa com a configuração TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Leia o manual sobre isolamento de transações e, por exemplo, a discussão da lista de usuários sobre isso .

Citar:

O backup verá apenas as transações confirmadas antes da definição do nível de isolamento.

Basicamente, tudo depois pg_dumpdefine o nível de isolamento da transação não faz parte desse despejo.

As operações de leitura / gravação não são afetadas (bloqueadas) durante esse período.


-1

Primeiro desculpe por responder a esse tópico antigo. Mas, pela minha experiência, não posso confirmar a afirmação de que você pode confiar em pg_dump /

Mudei há um mês para um projeto para o postgres. E é claro que fiz todos os backups com pg_dump do sistema ativo, conforme sugerido. Mas após a primeira verificação de backup, descobri que todos os lixões tinham tamanhos diferentes. Depois de restaurar algumas delas aleatoriamente, descobri que algumas tabelas estão faltando. Então comecei a analisar por que isso aconteceu e descobri que se o aplicativo de sobreposição, por exemplo, servidores de aplicativos, bloquear algumas tabelas e pg_dump, não está esperando até que sejam liberados. Sempre fui necessário parar o servidor durante o período de backup, o que não é uma boa solução.

Então, ainda estou procurando uma correção, mas como eu disse, discordo totalmente da afirmação de que você pode confiar no pg_dump.


Se isso acontecer, seria algo sério no pg_dump. Qual versão você está usando? Minha pergunta foi há 3 anos, e agora estou no 9.3 e no Amazon reds, que faz backups ao vivo aparentemente usando pg_dump. Eles não podem estar errados.
Roman

Você pode confiar no pg_dump para fazer um backup serializado (veja minha resposta para links / documentos e alguns detalhes) No entanto, durante minhas leituras, li que você não deve alterar a estrutura do próprio banco de dados, embora eu não tenha conseguido aprofundar nisso. . Como apenas inserimos / atualizamos / excluímos, não posso comentar sobre criações de tabelas. Para nós, certifiquei-me de não criar tabelas durante o tempo de pg_dump.
Dennis Nolte

2
Suas declarações estão indicando um erro grave (você registrou um relatório de erro?), Um erro sério na maneira como você despeja seu banco de dados ou algum mal-entendido. Na falta de fatos, não se pode decidir entre eles.
Dezso
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.