PostgreSQL: Mini Manual de Backup e Recovery

Backup é uma coisa séria, pois é o Recovery que garante (ou não) o emprego do DBA.

Este seria um pequeno manual do mínimo que deve ser levado em consideração a respeito. Não é uma rotina ideal nem muito menos definitiva, mas é um começo para quem não sabe por onde começar.

Os procedimentos abaixo foram executados em PostgreSQL 9.5 e CentOs 6.9. Em um ambiente diferente, os diretórios e comandos devem ser adaptados.

Os comandos iniciados com “#” devem ser executados com o usuário root.
Os comandos iniciados com “$” devem ser executados com o usuário postgresql.

O que são Archives?
Os Archives são cópias dos WAL Segments, que armazenam todas as informações executadas no banco de dados. Os Archives são portanto necessários para recuperar o banco a um ponto do tempo após a execução de um backup. Eles também são necessários para que seja feito um backup íntegro do banco de dados.

Os backups e os Archives devem ser copiados o mais frequentemente possível para outro local, de forma que seja possível a recuperação de uma maior quantidade de dados.

 

Como reiniciar o PostgreSQL?

# service postgresql-9.5 stop
# service postgresql-9.5 start

 

Como configurar o modo Archive?
Crie um diretório para armazena-los.

# mkdir /Archives
# chown -R postgres:postgres /Archives/

Adicione a linha abaixo no arquivo /var/lib/pgsql/9.5/data/pg_hba.conf, e reinicie o PostgreSQL.

local    replication     postgres                                trust

Altere as linhas abaixo no arquivo /var/lib/pgsql/9.5/data/postgresql.conf, e reinicie o PostgreSQL.

wal_level = hot_standby
max_wal_senders = 2
archive_mode = always
archive_command = 'cp %p /Archives/%f'

 

Como fazer com que Archives sejam gerados a cada 600 segundos?
Esta configuração é importante para que o tempo de uma possível perda de dados possa ser limitado a esta quantidade de segundos.
Altere a linha abaixo no arquivo /var/lib/pgsql/9.5/data/postgresql.conf, e reinicie o PostgreSQL.

archive_timeout = 600

 

Como fazer backup do PostgreSQL?
Crie um diretório para armazenar os backups.

# mkdir /Backup
# chown -R postgres:postgres /Backup

Crie um script de backup que utiliza o pg_basebackup.

$ cat Backup.sh
#!/bin/bash
export AGORA=`date +%Y%m%d-%T`
mkdir /Backup/$AGORA
pg_basebackup --format=tar --gzip --compress=9 --progress --pgdata /Backup/$AGORA

 

Como remover Archives?
Eles podem ser removidos pelo próprio sistema operacional. O comando abaixo, por exemplo, remove os Archives gerados a mais do que 7 dias.

$ find /Archives/* -mtime +7 -exec rm {} \;

 

Como recuperar um Backup e Archives?
No servidor onde ocorrerá a recuperação, pare o PostgreSQL e remova os dados atuais.

# service postgresql-9.5 stop
# rm -rf /var/lib/pgsql/9.5/data/*

No servidor onde ocorrerá a recuperação, crie o diretório para receber os Archives.

# mkdir /Archives

Copie o Backup e Archives para o servidor onde ocorrerá a recuperação.

# scp /Backup/20170521-172337/base.tar.gz root@192.168.1.43:/var/lib/pgsql/9.5/data/
# scp /Archives/* 192.168.1.43:/Archives/

No servidor onde ocorrerá a recuperação, dê permissão ao Backup e Archives para o usuário postgres.

# chown -R postgres:postgres /var/lib/pgsql/9.5/data/base.tar.gz
# chown -R postgres:postgres /Archives/

No servidor onde ocorrerá a recuperação, descompacte o backup.

$ cd /var/lib/pgsql/9.5/data/
$ tar xfzv base.tar.gz
$ rm base.tar.gz

No servidor onde ocorrerá a recuperação, crie um arquivo recovery.conf.

$ cd /var/lib/pgsql/9.5/data/
$ cat recovery.conf
restore_command = 'cp /Archives/%f %p'

No servidor onde ocorrerá a recuperação, inicie o PostgreSQL.

# service postgresql-9.5 start

 

3 comments

  1. Ricado, excelente post… apenas duas dúvidas: quanto tempo vc recomenda deixar os archives no servidor? No seu exemplo está apagando com mais de 7 dias. Nesse exemplo ele cria o archive .backup como ponto de restauração ou não?

    1. Se você quiser restaurar seu banco (porque apagou tudo sem querer, por exemplo), você só precisa do último backup de banco mais todos os Archives gerados após este Backup.
      Se você quiser voltar seu banco para o dia e horário X, você precisa de um backup do banco anterior ao dia e horário X e todos os Archives gerados ENTRE este backup e o dia e horário X.
      Então quanto tempo você deve manter os Archives depende de quanto tempo atrás você quer voltar. Se é comum pedirem para você voltar o banco para a semana passada, você deve ter precisar guardar 8 dias de Archives, mais o backup do banco anterior a estes Archives.
      Se não é comum pedirem para você voltar o banco como ele estava na semana passada, guarde dois backups (porque quem tem um não tem nenhum) mais os Archives gerados após estes backups.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.