PostgreSQL: Dump estado consistente sem bloqueio


2

Um bom backup de banco de dados é consistente, portanto, o despejo 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 até 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 apenas 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 falhar)

Respostas:


1

Bloqueio e bloqueio 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 em horário comercial a ~ 2.500 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.


0

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

É claro que a captura instantânea terá um log de transações sujo, portanto, será necessário promover a captura instantânea para o clone (instantâneo gravável), depois executar uma instância separada do PostgreSQL para limpar / reproduzir os logs e, em seguida, fazer um dump da segunda 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 nele.

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.