PostgreSQL: descarrega estado consistente sem bloquear

2

Um bom backup de banco de dados é consistente, portanto, o dump inteiro representa o estado em que o despejo foi iniciado. Uma estratégia típica para isso no MySQL é bloquear a tabela, para que nenhum dado adicional possa ser gravado durante o backup. Mas bloquear o banco de dados é uma experiência ruim do usuário (respostas lentas ou mesmo tempos limite, se o despejo levar muito tempo). Então, eu me pergunto se o Postgres tem um método para fazer backups consistentes sem bloquear as tabelas.

(Minha estratégia de backup atual com o MySQL é ter um escravo somente para os backups, portanto o mestre pode continuar a atender às solicitações dos usuários enquanto eu posso fazer um despejo consistente. Mas isso introduz outros pontos de falha, por exemplo, a replicação pode pausa)

    
por iGEL 25.11.2012 / 12:09

2 respostas

1

bloquear e bloquear são duas coisas diferentes. Alguns bloqueios não causam nenhum problema e você pode usar o banco de dados como de costume (bloqueio de compartilhamento de acesso), enquanto outros bloqueios têm um grande impacto e interrompem seus negócios.

A maneira mais simples de fazer backup de um banco de dados PostgreSQL é pg_dump . Fazemos backups diários de um banco de dados multi TB, durante o processamento de horário comercial a ~ 2500 tps.

Não compare o PostgreSQL com o MySQL, dois bancos de dados muito diferentes. Muitos problemas difíceis de corrigir no MySQL são muito simples no PostgreSQL. Fazer backups consistentes é uma dessas coisas.

Você não precisa de um escravo para fazer um backup. É útil, mas não é necessário.

    
por 27.11.2012 / 12:20
0

Executar o PostgreSQL sobre o ZFS e tirar instantâneos ao vivo deve resolver esse problema.

É claro que o instantâneo terá um log de transações sujo, então você terá que promover o instantâneo para o clone (instantâneo gravável), depois executar uma instância separada do PostgreSQL para limpar / reproduzir os logs e depois fazer um dump do segundo instância. Finalmente, você deve encerrar a segunda instância do servidor de banco de dados e excluir o clone.

Se você não tiver RAM suficiente para executar duas instâncias do PostgreSQL no servidor de produção, poderá transferir o instantâneo do banco de dados para o servidor secundário (com zfs send, zfs receive) e fazer um dump lá.

    
por 25.11.2012 / 12:40