Como Fazer Backup e Restaurar Bancos de Dados Usando pg_dump e pg_restore

Domine a proteção de dados do PostgreSQL com este guia completo para `pg_dump` e `pg_restore`. Aprenda a criar backups de banco de dados confiáveis usando vários formatos, incluindo texto simples, personalizado e de diretório. Descubra opções essenciais para um despejo eficiente e explore instruções passo a passo para restaurar seus dados. Este tutorial abrange as melhores práticas para agendamento, teste e gerenciamento seguro de seus backups do PostgreSQL para garantir a integridade dos dados e as capacidades de recuperação.

68 visualizações

Como Fazer Backup e Restaurar Bancos de Dados Usando pg_dump e pg_restore

No mundo do gerenciamento de bancos de dados, estratégias robustas de backup e restauração não são apenas recomendadas; são absolutamente críticas. A perda de dados pode ter várias origens, incluindo falhas de hardware, erros humanos ou ataques maliciosos. O PostgreSQL, um poderoso banco de dados relacional de código aberto, fornece utilitários essenciais de linha de comando, pg_dump e pg_restore, para garantir a integridade e a recuperabilidade de seus dados. Este tutorial irá guiá-lo pelas melhores práticas para utilizar essas ferramentas para criar backups confiáveis e realizar restaurações seguras de seus bancos de dados PostgreSQL.

Compreender esses utilitários é fundamental para qualquer administrador ou desenvolvedor PostgreSQL responsável pela proteção de dados. O pg_dump é usado para extrair um banco de dados PostgreSQL para um arquivo de script ou outro arquivo de arquivo, enquanto o pg_restore pode interpretar tais arquivos para reconstruir o banco de dados. Dominá-los permite que você proteja suas informações valiosas e mantenha a continuidade dos negócios.

Entendendo o pg_dump

O pg_dump é um utilitário para criar backups de um banco de dados PostgreSQL. Ele gera um arquivo contendo comandos SQL que podem ser usados para recriar os objetos do banco de dados (tabelas, funções, índices, etc.) e preenchê-los com dados. O pg_dump funciona conectando-se ao banco de dados e, em seguida, gerando a saída. Ele pode produzir saída em vários formatos, cada um com suas próprias vantagens.

Formatos de Saída

O pg_dump suporta vários formatos de saída:

  • Script SQL de texto simples (-Fp ou padrão): Este é o formato mais simples. Ele gera um arquivo contendo uma série de comandos SQL. Este formato é legível por humanos e facilmente scriptável, mas pode ser grande e mais lento para restaurar bancos de dados muito grandes.
  • Arquivo Customizado (-Fc): Este formato cria um arquivo de arquivo customizado e compactado. Geralmente é o formato recomendado para backups, pois é compactado por padrão, suporta restauração paralela (pg_restore) e é geralmente mais flexível.
  • Formato de Diretório (-Fd): Isso cria um diretório contendo vários arquivos, um para cada tabela e outros objetos. Também suporta restauração paralela e é útil para bancos de dados muito grandes.
  • Formato Tar (-Ft): Isso cria um arquivo tar. É semelhante ao formato de diretório, mas é um único arquivo. É útil para compatibilidade com outras ferramentas que manipulam arquivos tar.

Opções Comuns do pg_dump

Aqui estão algumas das opções mais frequentemente usadas para pg_dump:

  • -h <hostname>: Especifica o nome do host da máquina em que o servidor está em execução.
  • -p <port>: Especifica a porta TCP em que o servidor está ouvindo conexões.
  • -U <username>: Conecta como o usuário especificado.
  • -W: Força o pg_dump a solicitar uma senha antes de conectar.
  • -f <filename>: Especifica o nome do arquivo de saída. Se omitido, o pg_dump escreve na saída padrão.
  • -F <format>: Especifica o formato do arquivo de saída (p, c, d, t).
  • -Z <0-9>: Especifica o nível de compactação para formatos compactados (por exemplo, Fc).
  • --exclude-table=<table_name>: Exclui a tabela especificada do dump.
  • --jobs=<number>: Número de jobs paralelos a serem usados durante o dump (apenas para formato de diretório).
  • --clean: Inclui comandos para remover objetos de banco de dados antes de criá-los. Isso é útil para restaurações completas para garantir um estado limpo.
  • --create: Inclui um comando para criar o próprio banco de dados. Útil ao restaurar para um novo servidor.

Exemplo: Backup Básico de Texto Simples

Para criar um backup de texto simples de um banco de dados chamado mydatabase pertencente ao usuário myuser e salvá-lo em mydatabase_backup.sql:

pg_dump -U myuser -f mydatabase_backup.sql mydatabase

Se precisar especificar um host e porta:

pg_dump -h localhost -p 5432 -U myuser -f mydatabase_backup.sql mydatabase

Este comando solicitará a senha para myuser.

Exemplo: Backup em Formato Customizado (Recomendado)

O uso do formato de arquivo customizado é geralmente preferido por sua flexibilidade e compactação. Para criar um backup customizado compactado de mydatabase:

pg_dump -U myuser -Fc -f mydatabase_backup.dump mydatabase

Isso criará um arquivo chamado mydatabase_backup.dump, que é compactado e em um formato adequado para pg_restore.

Exemplo: Backup em Formato de Diretório com Jobs Paralelos

Para bancos de dados muito grandes, o dump paralelo pode acelerar significativamente o processo de backup. Isso requer o formato de diretório.

pg_dump -U myuser -Fd -j 4 -f mydatabase_backup_dir mydatabase

Este comando criará um diretório chamado mydatabase_backup_dir contendo vários arquivos, utilizando 4 jobs paralelos.

Entendendo o pg_restore

O pg_restore é um utilitário para restaurar um banco de dados PostgreSQL a partir de um arquivo criado pelo pg_dump em um dos formatos customizado, de diretório ou tar. Ele não é usado para dumps de texto simples (que são restaurados usando o comando psql).

Opções Comuns do pg_restore

  • -h <hostname>: Especifica o nome do host da máquina em que o servidor está em execução.
  • -p <port>: Especifica a porta TCP em que o servidor está ouvindo conexões.
  • -U <username>: Conecta como o usuário especificado.
  • -W: Força o pg_restore a solicitar uma senha antes de conectar.
  • -d <database>: Especifica o nome do banco de dados para o qual restaurar. Isso é obrigatório.
  • -v: Modo verboso.
  • -c ou --clean: Limpa (remove) objetos de banco de dados antes de recriá-los.
  • --create: Cria o banco de dados antes de restaurar nele. Requer conectar a um banco de dados diferente inicialmente (por exemplo, postgres).
  • -j <number>: Número de jobs paralelos a serem usados para a restauração. Isso acelera significativamente a restauração, especialmente para formatos customizados e de diretório.
  • -F <format>: Especifica o formato do arquivo (c, d, t). Geralmente, o pg_restore pode detectá-lo automaticamente.

Restaurando de Backups de Texto Simples

Se você criou um backup de texto simples usando pg_dump (por exemplo, mydatabase_backup.sql), você o restaura usando psql:

psql -U myuser -d mydatabase -f mydatabase_backup.sql

Se o arquivo de backup incluir comandos CREATE DATABASE e \connect, você pode precisar se conectar a um banco de dados diferente (como postgres) e omitir o argumento -d mydatabase:

psql -U myuser -f mydatabase_backup.sql postgres

Exemplo: Restaurando de um Backup em Formato Customizado

Para restaurar o backup em formato customizado mydatabase_backup.dump para um banco de dados chamado restored_db:

pg_restore -U myuser -d restored_db mydatabase_backup.dump

Se o banco de dados de destino restored_db não existir, você pode usar a opção --create. Neste caso, você precisa se conectar a um banco de dados diferente (como postgres), pois o banco de dados de destino será criado.

pg_restore -U myuser --create -d restored_db mydatabase_backup.dump

Este comando criará o banco de dados restored_db e, em seguida, restaurará os dados nele.

Exemplo: Restauração Paralela

Para uma restauração mais rápida, especialmente com grandes conjuntos de dados, use a opção -j:

pg_restore -U myuser -d restored_db -j 4 mydatabase_backup.dump

Isso tentará restaurar o banco de dados usando 4 jobs paralelos.

Exemplo: Restaurando de Backup em Formato de Diretório

Para restaurar um backup criado em formato de diretório (por exemplo, mydatabase_backup_dir):

pg_restore -U myuser -d restored_db -j 4 mydatabase_backup_dir

Note que o último argumento é o caminho do diretório.

Melhores Práticas para Backups

  • Agendamento Regular: Automatize seus backups usando cron (Linux/macOS) ou Agendador de Tarefas (Windows) para serem executados em intervalos regulares (por exemplo, diariamente, de hora em hora).
  • Escolha o Formato Certo: Para a maioria dos casos de uso, o formato customizado (-Fc) é recomendado devido à sua compactação e compatibilidade com os recursos paralelos do pg_restore. Use o formato de diretório (-Fd) para bancos de dados extremamente grandes onde o dump/restauração paralela é crucial.
  • Teste Seus Backups: Um backup só é útil se puder ser restaurado. Teste regularmente seu processo de restauração, restaurando para um ambiente de staging ou desenvolvimento para garantir a integridade dos dados e a validade de seus arquivos de backup.
  • Armazene Backups Fora do Local: Mantenha cópias de seus backups em um local físico separado do seu servidor de banco de dados principal para se proteger contra desastres em todo o local.
  • Monitore Jobs de Backup: Implemente monitoramento para garantir que seus jobs de backup agendados estejam sendo executados com sucesso e para alertá-lo caso falhem.
  • Considere a Compactação: Use as opções de compactação do pg_dump ou canalize a saída através de ferramentas de compactação externas (gzip, zstd) se não estiver usando formatos que compactam automaticamente.
  • Use --clean e --create com Sabedoria: Ao realizar uma restauração completa em um ambiente existente, --clean pode ser muito útil. Ao migrar para um novo ambiente ou garantir um estado completamente novo, --create é essencial. Tenha cuidado com essas opções em sistemas de produção.
  • Controle de Versão de Backups: Implemente uma estratégia para gerenciar a retenção de backups, incluindo quanto tempo os backups são mantidos e como os antigos são descartados.

Conclusão

O pg_dump e o pg_restore são ferramentas indispensáveis para proteger seus dados PostgreSQL. Ao entender suas várias opções, formatos de saída e implementando uma estratégia consistente de backup e restauração com testes regulares, você pode mitigar significativamente o risco de perda de dados e garantir a resiliência de seus sistemas de banco de dados. Faça dessas utilidades um pilar de suas práticas de administração de banco de dados.