Pesquisa de site

Como fazer backup e restaurar um banco de dados PostgreSQL


Em um ambiente de produção, não importa quão grande ou pequeno seja o seu banco de dados PostgreSQL, o backup regular é um aspecto essencial do gerenciamento de banco de dados. Neste artigo, você aprenderá como fazer backup e restaurar um banco de dados PostgreSQL.

Presumimos que você já tenha uma instalação funcional do sistema de banco de dados PostgreSQL. Caso contrário, leia nossos artigos a seguir para instalar o PostgreSQL em sua distribuição Linux.

Vamos começar…

Faça backup de um único banco de dados PostgreSQL

O PostgreSQL fornece o utilitário pg_dump para ajudá-lo a fazer backup de bancos de dados. Ele gera um arquivo de banco de dados com comandos SQL em um formato que pode ser facilmente restaurado no futuro.

Para fazer backup de um banco de dados PostgreSQL, comece fazendo login no servidor de banco de dados, depois mude para a conta de usuário Postgres e execute pg_dump da seguinte maneira (substitua tecmintdb pelo nome do banco de dados do qual deseja fazer backup). Por padrão, o formato de saída é um arquivo de script SQL de texto simples.

pg_dump tecmintdb > tecmintdb.sql

O pg_dump também suporta outros formatos de saída. Você pode especificar o formato de saída usando a opção -F, onde c significa arquivo de formato personalizado, d significa arquivo de formato de diretório e t significa arquivo em formato tar: todos os formatos são adequados para entrada em pg_restore.

Por exemplo:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

Para despejar a saída no formato de saída do diretório, use o sinalizador -f (que é usado para especificar o arquivo de saída) para especificar o diretório de destino em vez de um arquivo. O diretório que será criado pelo pg_dump não deve existir.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Para fazer backup de todos os bancos de dados PostgreSQL, use a ferramenta pg_dumpall conforme mostrado.

pg_dumpall > all_pg_dbs.sql

Você pode restaurar o dump usando psql conforme mostrado.

psql -f all_pg_dbs.sql postgres

Restaurando um banco de dados PostgreSQL

Para restaurar um banco de dados PostgreSQL, você pode usar os utilitários psql ou pg_restore. psql é usado para restaurar arquivos de texto criados por pg_dump enquanto pg_restore é usado para restaurar um banco de dados PostgreSQL a partir de um arquivo criado por pg_dump< em um dos formatos de texto não simples (customizado, tar ou diretório).

Aqui está um exemplo de como restaurar um despejo de arquivo de texto simples:

psql tecmintdb < tecmintdb.sql

Conforme mencionado acima, um despejo de formato personalizado não é um script para psql, portanto deve ser restaurado com pg_restore conforme mostrado.

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

Backup de banco de dados PostgreSQL compactado

Se o banco de dados do qual você está fazendo backup for grande e você quiser gerar um arquivo de saída bem menor, você poderá executar um dump compactado onde terá que filtrar a saída do pg_dump por meio de uma ferramenta de compactação como o gzip ou qualquer um dos seus favoritos:

pg_dump tecmintdb | gzip > tecmintdb.gz

Se o banco de dados for extremamente grande, você poderá fazer dump em paralelo, despejando tabelas number_of_jobs simultaneamente usando o sinalizador -j, conforme mostrado.

pg_dump -F d -j 5 -f tecmintdumpdir

É importante observar que a opção de dump paralelo reduz o tempo de dump, mas por outro lado, também aumenta a carga no servidor de banco de dados.

Backup de bancos de dados PostgreSQL remotos

pg_dump é uma ferramenta cliente regular do PostgreSQL que oferece suporte a operações em servidores de banco de dados remotos. Para especificar o servidor de banco de dados remoto que pg_dump deve contatar, use as opções de linha de comando -h para especificar o host remoto e -p especifica o host remoto porta em que o servidor de banco de dados está escutando. Além disso, use o sinalizador -U para especificar o nome da função de banco de dados para conectar-se.

Lembre-se de substituir 10.10.20.10 e 5432 e tecmintdb pelo endereço IP do host remoto ou nome do host, porta do banco de dados e nome do banco de dados, respectivamente.

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Certifique-se de que o usuário que está se conectando remotamente tenha os privilégios necessários para acessar o banco de dados e que o método de autenticação de banco de dados apropriado esteja configurado no servidor de banco de dados, caso contrário, você receberá um erro como o mostrado na captura de tela a seguir.

Também é possível fazer dump de um banco de dados diretamente de um servidor para outro, use os utilitários pg_dump e psql conforme mostrado.

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Backup automático do banco de dados PostgreSQL usando um Cron Job

Você pode realizar backups em intervalos regulares usando tarefas cron. Cron jobs são um meio comumente usado para agendar vários tipos de tarefas para execução em um servidor.

Você pode configurar uma tarefa cron para automatizar o backup do banco de dados PostgreSQL da seguinte maneira. Observe que você precisa executar os seguintes comandos como superusuário do PostgreSQL:

mkdir -p /srv/backups/databases

Em seguida, execute o seguinte comando para editar o crontab e adicionar um novo cron job.

crontab -e

Copie e cole a seguinte linha no final do crontab. Você pode usar qualquer um dos formatos de dump explicados acima.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Salve o arquivo e saia.

O serviço cron começará automaticamente a executar este novo trabalho sem reiniciar. E esse cron job será executado todos os dias à meia-noite, é uma solução mínima para a tarefa de backup.

Para obter mais informações sobre como agendar tarefas cron, consulte: Como criar e gerenciar tarefas cron no Linux

Por enquanto é isso! É uma boa ideia incluir o backup de dados em sua rotina de gerenciamento de banco de dados. Para entrar em contato conosco em caso de dúvidas ou comentários, use o formulário de feedback abaixo. Para obter mais informações, consulte as páginas de referência pg_dump e pg_restore.