Faça backup e recupere um banco de dados Postgres usando wal-e

Convenções:

  • master: Seu servidor principal
  • backup: Seu servidor de backup
  • Postgresql 9.3 em ambos os servidores com os caminhos de dados padrão (/ var / postgresql / <version> / <cluster>)

Muito importante

  • Todos os comandos para instalar pacotes são feitos por um usuário sudo ou pelo usuário root
  • Todos os comandos para gerenciar o servidor postgresql são feitos pelo usuário postgres

Pacotes e configurações em ambos os servidores

Instale pacotes em backup e mestre

sudo apt-get install daemontools
sudo easy_install pip

sudo pip install wal
-e

Por uma razão estranha, se você instalar o pip usando apt-get, todos os pacotes instalados pelo pip não poderão ser executados pelo postgresusuário.

Crie um diretório de ambiente para usar o wal-e

envdirfaz parte dos aplicativos que vêm com daemontools que permitem que um comando use arquivos dentro de um diretório como variáveis ​​de ambiente usando o nome do arquivo como uma chave e seu conteúdo como o valor. Você pode ver mais exemplos aqui: http://thedjbway.b0llix.net/daemontools/envdir.html

Uma pasta / etc / wal-ed será criada para armazenar as variáveis ​​de ambiente necessárias. Basta executar os seguintes comandos:

umask u=rwx,g=rx,o=
mkdir
-p /etc/wal-e.d/env
echo
"secret-key-content" > /etc/wal-e.d/env/AWS_SECRET_ACCESS_KEY
echo
"access-key" > /etc/wal-e.d/env/AWS_ACCESS_KEY_ID
echo
's3://some-bucket/directory/or/whatever' > /etc/wal-e.d/env/WALE_S3_PREFIX
chown
-R root:postgres /etc/wal-e.d

Faça backup e recupere seu servidor

Configure seu arquivo master postgresql.conf

Está localizado em /etc/postgresql/9.3/main/

Deve conter as seguintes linhas:

wal_level = archive
archive_mode
= yes
archive_command
= 'envdir /etc/wal-e.d/env /usr/local/bin/wal-e wal-push %p'
archive_timeout
= 60

Uma vez que o archive_command será executado como postgresusuário, precisamos garantir que ele será executado bem após reiniciar o servidor. Se você pode executar como postgresusuário o seguinte comando:

envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-list

… então tudo funciona bem. Agora o servidor deve ser reiniciado para assumir a nova configuração.

Você pode encontrar mais opções para o postgresql.conf aqui: http://www.postgresql.org/docs/9.3/static/runtime-config-wal.html

Por fim, reinicie seu servidor.

Empurre seu backup

Faça login como postgrese execute wal-e backup-push:

su postgres
envdir
/etc/wal-e.d/env /usr/local/bin/wal-e backup-push /var/lib/postgresql/9.3/main

Configure seu servidor de backup

Se este for um novo backup, você terá que remover todo o diretório de dados e copiar o backup para uma pasta de cluster. Execute o seguinte:

su postgres
rm
-rf /var/lib/postgresql/9.3/main
envdir
/etc/wal-e.d/env /usr/local/bin/wal-e backup-fetch /var/lib/postgresql/9.3/main LATEST

A palavra LATEST pode ser alterada para qualquer arquivo de backup que você deseja listado por:

envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-list

O formato de um nome de arquivo de backup é base_XXXXXX_XXXX. Exemplo:

base_00000001000000010000002A_00000040

Pare o servidor e crie um arquivo dentro da pasta de dados com a seguinte linha:recovery.conf

restore_command = '/usr/bin/envdir /etc/wal-e.d/env /usr/local/bin/wal-e wal-fetch %f %p'

Reinicie seu servidor. Ele deve começar a se recuperar.

Depois que o banco de dados é recuperado, o nome do arquivo recovery.conf é alterado para recovery.done a fim de prevenir erros humanos.

Você deve ter tudo feito backup agora.

Servidor em espera

Se você deseja que este seja seu servidor em espera para backups, basta adicionar a seguinte linha ao arquivo recovery.conf e reiniciar o servidor:

standby_mode = 'on'

Você não poderá acessar seus dados pelo psql, mas ele será atualizado de vez em quando. Isso é mostrado no log.

Não se preocupe se não houver arquivos encontrados, é apenas um trabalhador procurando o próximo segmento da parede :).

Extra

Durante minha pesquisa, encontrei um pacote para manipular seu servidor postgresql. Você pode conferir aqui:

pg_tune

A postagem de onde peguei este link: Adventures in Scaling, Parte 2: PostgreSQL

Espero que este post tenha sido útil para quem já passou mais de 3 horas procurando um tutorial bem descrito como eu.