SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Palestrante: Juliano Atanazio
Gerenciamento
de Backups
com pgbarman
http://www.pgbarman.org/
Apresentação
● O que é
Barman (Backup and Recovery Manager) é uma ferramenta open source
de administração para recuperação de disastre de servidores PostgreSQL
escrita em Python.
Permite fazer backups remotos de múltiplos servidores em ambientes
críticos de negócios e auxilia DBAs durante a fase de recuperação.
Dentre seus mais úteis recursos incluem backup de catálogos, políticas de
retenção, recuperação remota, arquivamento e compressão de arquivos de
WAL.
O Barman foi desenvolvido e é mantido pelos profissionais PostgreSQL da
2ndQuadrant.
Apresentação
● Características e Objetivos
➔ Backup físico completo a quente de um servidor PostgreSQL;
➔ Gerenciamento de backups de múltiplos servidores PostgreSQL;
➔ Recuperação local e remota de um backup;
➔ Suporte SSH para operações remotas;
➔ Informações e estado do servidor;
➔ Compressão de arquivos de WAL (bzip, gzip ou customizado);
➔ Integração com ferramentas padronizadas de arquivamento (e. g. tar);
Apresentação
● Características e Objetivos
➔ Hook scripts de backup (pre/post);
➔ Armazenamento local de metadados;
➔ Um simples arquivo INI de configuração;
➔ Point-In-Time-Recovery (PITR);
➔ Backup remoto de um servidor PostgreSQL;
➔ Gerenciamento de backups da base e arquivos de WAL por um catálogo;
➔ Totalmente escrito em Python;
➔ Informações gerais de uso de disco de backup;
➔ Diagnósticos do servidor para backup;
➔ rsync sobre ssh para sincronização de arquivos e transferências.
Apresentação
● Licença
Barman é propriedade exclusiva da 2ndQuadrant Itália e seu código é
distribuído sob a licença GPLv3.
Contribuições ao Barman são bem vindas, e serão listadas no arquivo
AUTHORS.
Apresentação
● Suporte
Site oficial: http://www.pgbarman.org
Blog: http://www.pgbarman.org/blog/
Lista de discussão: https://groups.google.com/group/pgbarman
Canal IRC: irc://irc.freenode.net/barman
Suporte de Serviços da 2ndQuadrant
FAQ: http://www.pgbarman.org/FAQ/
Documentação oficial: http://www.pgbarman.org/documentation/
Cenário de Testes
Hostname: backup
IP: 192.168.7.70
System User: barman
Hostname: pg
IP: 192.168.7.71
System User: postgres
Instalação
● Requisitos do Sistema
➔ Linux/Unix
➔ Python 2.6 or 2.7
➔ Módulos Python:
➔ argcomplete
➔ argh >= 0.21.2
➔ psycopg2 (driver PostgreSQL para Python)
➔ python-dateutil < 2.0 (desde a versão 2.0 requer Python 3)
➔ distribute (optional)
➔ PostgreSQL >= 8.4
➔ rsync >= 3.0.4
Instalação
● Linux
➔ Via Código Fonte
Respectivamente, criação de grupo* e usuário* de sistema:
Instalação de pacotes necessários:
*Próximos IDs de sistema para grupo e usuário
# groupadd ­g 105 barman
# useradd ­u 102 ­g barman ­s /bin/bash ­d /var/lib/barman 
­k /etc/skel ­m barman
# aptitude ­y install 
python­{argcomplete,argh,argparse,dateutil,psycopg2} 
rsync bash­completion postgresql­client­9.2
Instalação
● Linux
➔ Via Código Fonte
Baixando o código-fonte:
# cd /usr/src/
# wget ­c  
http://tenet.dl.sourceforge.net/project/pgbarman/1.2.2/barman­
1.2.2.tar.gz
Instalação
● Linux
➔ Via Código Fonte
Descompactação:
Entrar no diretório do código fonte:
Execução do script Python de instalação (build):
Criação de diretórios de manuais (1 e 5), diretório de configuração de
servidores PostgreSQL e diretório de logs do Barman :
# tar xvf barman­1.2.2.tar.gz
# cd barman­1.2.2/
# ./setup.py build
# mkdir ­p /usr/local/man/{man1,man5} /etc/barman.d  /var/log/barman
Instalação
● Linux
➔ Via Código Fonte
Cópia dos arquivos de manuais para os respectivos diretórios:
Execução do script Python de instalação (install)::
Cópia do arquivo de bash completion:
# cp doc/barman.1 /usr/local/man/man1/
# cp doc/barman.5 /usr/local/man/man5/
# ./setup.py install
# cp scripts/barman.bash_completion /etc/bash_completion.d/barman
Instalação
● Linux
➔ Via Código Fonte
Cópia do arquivo de configuração para o diretório do usuário de sistema
barman:
Criação de link para o arquivo de configuração em /etc:
Permissões, grupo e usuário donos de diretórios:
# cp doc/barman.conf ~barman/
# ln ­s ~barman/barman.conf  /etc/
# chmod ­R 770 ~barman /etc/barman.d  /var/log/barman
# chown ­R barman: ~barman /etc/barman.d  /var/log/barman
Instalação
● Linux
➔ Via Código Fonte
Utilizando o usuário de sistema barman para testar o man:
Criação da estrutura de diretórios de backup para o servidor pg:
# su ­ barman
$ man barman
$ man 5 barman
$ mkdir ­pm 0700 /var/lib/barman/bkp/pg/incoming/
Instalação
● Linux (Servidor PostgreSQL)
➔ Via Código Fonte
Instalação do rsync:
Arquivo pg_hba.conf (adicionar):
Arquivo postgresql.conf (alterar):
# aptitude install rsync
host    all             barman          192.168.7.70/32  md5
wal_level = 'archive' 
archive_mode = on
archive_command = 'scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%f'
Instalação
● Linux (Servidor PostgreSQL)
➔ Via Código Fonte
Utilizando o usuário de sistema postgres para criar o usuário barman
no cluster e sua senha:
Reinicialização do serviço (como root):
# su ­ postgres
$ psql ­c "CREATE ROLE barman LOGIN SUPERUSER PASSWORD 'senha';"
# service postgresql restart
Configuração
● Comunicação SSH Bidirecional
Em ambos servidores, criar a chave SSH para ser utilizada na comunicação
sem senha:
$ ssh­keygen ­t rsa ­P '' ­f ~/.ssh/id_rsa
Usuário barman
Usuário postgres
Configuração
● Comunicação SSH Bidirecional
No servidor Barman
Inserir a chave pública no conteúdo do arquivo de chaves autorizadas no
servidor PostreSQL, no usuário postgres:
Garantir que o usuário postgres seja dono do diretório .ssh:
$ cat ~barman/.ssh/id_rsa.pub | ssh root@pg "cat ­ >> 
~postgres/.ssh/authorized_keys"
$ ssh root@pg "chown ­R postgres: ~postgres/.ssh"
Configuração
● Comunicação SSH Bidirecional
No servidor Barman
Ajuste de permissão 0700 ao diretório .ssh:
Ajuste de permissão 0600 aos araquivos do diretório .ssh:
$ ssh root@pg "chmod 0600 ­R  ~postgres/.ssh/*"
ssh root@pg "chmod 0700 ~postgres/.ssh"
Configuração
● Comunicação SSH Bidirecional
No servidor PostgreSQL
Inserir a chave pública no conteúdo do arquivo de chaves autorizadas no
servidor Barman, no usuário barman:
Garantir que o usuário postgres seja dono do diretório .ssh:
$ cat ~postgres/.ssh/id_rsa.pub | ssh root@backup "cat ­ >> 
~barman/.ssh/authorized_keys"
$ ssh root@backup "chown ­R barman: ~barman/.ssh"
Configuração
● Comunicação SSH Bidirecional
No servidor PostgreSQL
Ajuste de permissão 0700 ao diretório .ssh:
Ajuste de permissão 0600 aos araquivos do diretório .ssh:
$ ssh root@backup "chmod 0600 ­R  ~barman/.ssh/*"
ssh root@backup "chmod 0700 ~barman/.ssh"
Configuração
● Comunicação SSH Bidirecional
Testando
No servidor de banco de dados com o usuário postgres:
No servidor de backup com o usuário barman:
$ ssh barman@backup
$ ssh postgres@pg
Configuração
● Diretório de Backup
O Barman precisa de um diretório principal de backup para armazenar todos
backups, através do qual pode-se definir uma pasta para cada servidor que fará
backup e para cada tipo de recurso (backup ou segmentos WAL, por instância).
O arquivo de configuração define o parâmetro barman_home, que é o diretório
onde o Barman armazenará todos os backups por padrão.
Esse diretório é o “home” para o usuário de sistema do Barman.
Geralmente é /srv/barman ou /var/lib/barman.
Configuração
● Configuração Básica
No diretório doc (dentro do diretório dos sources) há um arquivo com
configurações mínimas, que deve ser usado como modelo para
/etc/barman.conf ou ~/.barman.conf.
Usualmente, o primeiro se aplica a todos usuários no servidor de backup,
enquanto o último aplica-se ao usuário barman.
A partir da versão 1.2.1 pode ser usado o /etc/barman/barman.conf como
arquivo de configuração para o sistema.
Configuração
● Configuração Básica
O arquivo de configuração segue o formato INI padrão e se divide em:
- Uma seção para configurações gerais (identificada pela etiqueta (label)
barman);
- Uma seção para cada servidor PostgreSQL, cada uma identificada por uma
etiqueta.
"all" e "barman" são palavras reservadas e não podem ser usadas como
labels de servidores
Configuração
● Configuração Básica
A partir da versão 1.1.2 é possível especificar um diretório para arquivos de
configuração, similarmente a outras aplicações Linux, através do parâmetro
configuration_files_directory (vazio por padrão).
O Barman vai ler todos os arquivos com a extensão .conf que estiverem
nessa pasta.
Por exemplo, se o valor do parâmetro configuration_files_directory
for /etc/barman.d, pode-se designar um arquivo por servidor cada um
contendo sua etiqueta referente à sua seção.
Caso contrário, pode ser utilizado o padrão do Barman que é especificar várias
seções no mesmo arquivo de configuração
Configuração
● Arquivo /etc/barman.conf
Continua...
; Barman, Backup and Recovery Manager for PostgreSQL
; http://www.pgbarman.org/ ­ http://www.2ndQuadrant.com/
;
; Main configuration file
[barman]
; Diretório principal
barman_home = /var/lib/barman/bkp
; Usuário de sistema
barman_user = barman
; Arquivo de log
log_file = /var/log/barman/barman.log
; Compressão padrão: valores possíveis são None (padrão), bzip2, gzip ou custom
compression = gzip
Configuração
● Arquivo /etc/barman.conf
...
; Scripts hook de backup Pre/post
;pre_backup_script = env | grep ^BARMAN
;post_backup_script = env | grep ^BARMAN
; Diretório de arquivos de configuração. 
; Coloque suas seções em arquivos separados com a extensão .conf
configuration_files_directory = /etc/barman.d
; Minimum number of required backups (redundancy)
minimum_redundancy = 0
; Global retention policy (REDUNDANCY or RECOVERY WINDOW) ­ default empty
retention_policy =
; Global bandwidth limit in KBPS ­ default 0 (meaning no limit)
bandwidth_limit = 0
Configuração
● Arquivo /etc/barman.d/pg.conf
Continua...
; Configuração do Servidor Postgres pg
[pg]
; Descrição
description =  "Servidor PostgreSQL pg"
; Opções SSH
ssh_command = ssh postgres@pg
; String de conexão PostgreSQL
conninfo = host=pg user=barman password=senha dbname=postgres
;Compressão customizada
compression = custom
custom_compression_filter = xz ­z9
custom_decompression_filter = xz ­d
Configuração
● Arquivo /etc/barman.d/pg.conf
Nota-se que há configurações do servidor pg que foram sobrescritas.
; Número mínimo de backups mantidos
minimum_redundancy = 0
; Política de retenção
retention_policy =
Uso do pgbarman
● Servidores
➔ Listando os Servidores
O seguinte comando exibe a lista de todos os servidores disponíveis:
$ barman list­server
pg – Servidor PostgreSQL pg
Uso do pgbarman
● Servidores
● Mostra a Configuração de um Servidor
Continua...
$ barman show­server pg
Server pg:
active: true
description: Servidor PostgreSQL pg
ssh_command: ssh postgres@pg
conninfo: host=pg user=barman password=senha dbname=postgres
backup_directory: /var/lib/barman/bkp/pg
basebackups_directory: /var/lib/barman/bkp/pg/base
wals_directory: /var/lib/barman/bkp/pg/wals
incoming_wals_directory: /var/lib/barman/bkp/pg/incoming
lock_file: /var/lib/barman/bkp/pg/pg.lock
compression: custom
custom_compression_filter: xz ­z9
custom_decompression_filter: xz ­d
Uso do pgbarman
● Servidores
● Mostra a Configuração de um Servidor
retention_policy_mode: auto
retention_policy: 
wal_retention_policy: main
pre_backup_script: None
post_backup_script: None
minimum_redundancy: 0
bandwidth_limit: 0
tablespace_bandwidth_limit: None
current_xlog: 000000020000000000000013
last_shipped_wal: None
archive_command: scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%f
server_txt_version: 9.2.4
data_directory: /var/lib/postgresql/9.2/main
archive_mode: on
config_file: /etc/postgresql/9.2/main/postgresql.conf
hba_file: /etc/postgresql/9.2/main/pg_hba.conf
ident_file: /etc/postgresql/9.2/main/pg_ident.conf
Uso do pgbarman
● Servidores
● Checagem de Diagnóstico
Pode-se checar se a conexão para um dado servidor está funcionando
apropriadamente com o seguinte comando:
$ barman check pg
Server pg:
ssh: OK
PostgreSQL: OK
archive_mode: OK
archive_command: OK
directories: OK
retention policy settings: OK
compression settings: OK
minimum redundancy requirements: OK (have 5 backups, expected at least 0)
Uso do pgbarman
● Backups
● Backup IDs
Uma identificação de backup ou backup ID é uma nomenclatura de backup para
um dado servidor que tem seu nome formado a partir da data e hora que foi
iniciado.
Dado o backup ID: 20130520T235823
<data>T<hora>
YYYYmmDDTHHMMSS
Uso do pgbarman
● Backups
● Backup IDs
<data>
YYYYY - Ano com quatro dígitos: 2013
mm - Mês com dois dígitos: 05
DD - Dia com dois dígitos: 20
<hora>
HH - Hora em formato 24h: 23
MM - Minutos: 58
SS - Segundos: 23
YYYYmmDDTHHMMSSYYYYmmDDTHHMMSS
Uso do pgbarman
● Backups
● Apelidos de Backup IDs
A partir da versão 1.1.12, pode usar qualquer um dos seguintes apelidos para
identificar um backup em particular para um dado servidor.
De acordo com a ordem cronológica:
- latest/last: o último backup disponível para o servidor.
- oldest/first: o backup mais antigo de um servidor.
Esses apelidos podem ser usados com qualquer um dos seguintes comandos
do barman: show­backup, delete, list­files ou recover.
Uso do pgbarman
● Backups
● Execução de um Backup Completo
$ barman backup pg
Starting backup for server pg in /var/lib/barman/bkp/pg/base/20130721T183941
Backup start at xlog location: 0/14000020 (000000020000000000000014, 00000020)
Copying files.
Copy done.
Asking PostgreSQL server to finalize the backup.
Backup end at xlog location: 0/140000A8 (000000020000000000000014, 000000A8)
Backup completed
Uso do pgbarman
● Backups
● Listando Backups por Servidor
$ barman list­backup pg
pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130713T101241 ­ Sat Jul 13 10:12:48 2013 ­ Size: 32.0 MiB ­ WAL Size: 10.0 MiB
Uso do pgbarman
● Backups
● Exibindo Informações de um Backup
Continua...
$ barman show­backup pg oldest
Backup 20130713T101241:
  Server Name       : pg
  Status            : DONE
  PostgreSQL Version: 90204
  PGDATA directory  : /var/lib/postgresql/9.2/main
  Base backup information:
    Disk usage      : 36.0 MiB
    Timeline        : 1
    Begin WAL       : 000000010000000000000005
    End WAL         : 000000010000000000000005
    WAL number      : 1
    Begin time      : 2013­07­13 10:12:41.253963
    End time        : 2013­07­13 10:12:48.463451
    Begin Offset    : 32
    End Offset      : 168
    Begin XLOG      : 0/5000020
    End XLOG        : 0/50000A8
Uso do pgbarman
● Backups
● Exibindo Informações de um Backup
  WAL information:
    No of files     : 5
    Disk usage      : 10.0 MiB
    Last available  : 00000001000000000000000F
  Catalog information:
    Retention Policy: not enforced
    Previous Backup : ­ (this is the oldest base backup)
    Next Backup     : 20130713T103810
Uso do pgbarman
● Backups
● Listando Arquivos de um Backup
$ barman list­files pg 20130719T211849
/var/lib/barman/bkp/pg/base/20130719T211849/backup.info
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/PG_VERSION
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/backup_label
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/backup_label.old
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/environment
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_ctl.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_hba.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_ident.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/postgresql.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/postgresql.conf.origin
. . .
Uso do pgbarman
● Backups
● Apagando um Backup
$ barman delete pg first
Deleting backup 20130713T101241 for server pg
Delete associated WAL segments:
000000010000000000000001
000000010000000000000002
000000010000000000000003
000000010000000000000004
000000010000000000000005
000000010000000000000005.00000020.backup
000000010000000000000006
00000001000000000000000C
00000001000000000000000D
00000001000000000000000E
00000001000000000000000F
Done
Uso do pgbarman
● Restauração Completa de um Servidor
● Local
Não foi instalado o servidor PostgreSQL na máquina de backup do
laboratório. Se tivesse sido instalado, poderia levantar o banco localmente
utilizando o diretório /tmp/teste como cluster do Postgres:
$ barman recover pg 20130719T211849 /tmp/teste
Processing xlog segments for pg
00000002.history
000000020000000000000005
000000020000000000000006
. . .
$ pg_ctl ­D /tmp/teste
Uso do pgbarman
● Restauração Completa de um Servidor
● Remota
$ barman recover ­­remote­ssh­command="ssh postgres@pg" pg last 
/var/lib/postgresql/9.2/main
barman recover ­­remote­ssh­command="ssh postgres@pg" pg last 
/var/lib/postgresql/9.2/data
Starting remote restore for server pg using backup 20130721T183941 
Destination directory: /var/lib/postgresql/9.2/data
Copying the base backup.
Copying required wal segments.
The archive_command was set to 'false' to prevent data losses.
Your PostgreSQL server has been successfully prepared for recovery!
. . .
Uso do pgbarman
● Restauração Completa de um Servidor
● PITR
$ barman recover ­­remote­ssh­command="ssh postgres@pg" ­­target­time "2013­07­
21 19:00:00" pg last /var/lib/postgresql/9.2/main
Starting remote restore for server pg using backup 20130721T183941 
Destination directory: /var/lib/postgresql/9.2/main
Doing PITR. Recovery target time: '2013­07­21 19:00:00'
Copying the base backup.
Copying required wal segments.
Generating recovery.conf
. . .
Limitando o Uso de Largura de Banda de I/O
A partir da versão 1.2.1 é possível limitar o uso de largura de banda através da
opção bandwidth_limit (global/por servidor), especificando o máximo em
kb/s (kilobytes por segundo).
O padrão é 0 (zero), sem limite.
Sintaxe de configuração:
Obs.: Esse recurso foi proposto por Gregory Smith
tablespace_bandwidth_limit = tbname:bwlimit[, tbname:bwlimit, ...]
Limitando o Uso de Largura de Banda de I/O
Esse parâmetro aceita uma lista separada de pares que são respectivamente o
nome do tablespace e seu limite correspondente (em kb/s).
Ao fazer backup de um servidor, o Barman tentará localizar os tablespaces
declarados.
Se encontrar, o limite configurado será forçado, caso contrário o padrão será
aplicado.
Modo de Manutenção
Operações de manutenção fazem compressão de arquivos do WAL e os move
do diretório de entrada (incoming) para o de arquivamento (wal), além de
aplicar as políticas de retenção.
O seguinte comando pode ser utilizado manualmente, mas é indicado para ser
incluído nas rotinas do cron do sistema operacional.
$ barman cron
Processing xlog segments for pg
00000003.history
000000030000000000000015
000000030000000000000016
000000030000000000000017
000000030000000000000017.00000020.backup
000000030000000000000018
. . .
Modo de Manutenção
● Compressão do WAL
A compressão dos arquivos do WAL se dá pela execução do comando cron do
barman (como visto anteriormente).
Essa compressão é feita conforme o arquivo de configuração (global ou por
servidor).
O parâmetro compression aceita três opções:
➔ gzip: Compressão Gzip (requer gzip);
➔ bzip2: Compressão Bzip2 (requer bzip2);
➔ custom: Para compressão customizada, que requer mais dois parâmetros:
➔ custom_compression_filter: Filtro de compressão;
➔ custom_decompression_filter: Filtro de descompressão.
Modo de Manutenção
● Redundância Mínima de Segurança
A partir da versão 1.2.0, pode-se definir um número mínimo de backups a
serem mantidos pelo parâmetro de configuração minimum_redundancy, por
padrão é 0.
Pode ser feito como configuração global ou por servidor.
É uma proteção contra operações de remoções acidentais de backups
(barman delete).
Importante: Tomar cuidado para que políticas de retenção não conflitem com a
redundância mínima de segurança.
Verifique os logs do Barman regularmente sobre isso.
Modo de Manutenção
● Políticas de Retenção
Desde a versão 1.2.0, o Barman suporta políticas de retenção para backups.
Uma política de retenção de backup é uma política definida pelo usuário de
quanto tempo backups precisam ser retidos para procedimentos de
recuperação.
As políticas de retenção podem ser definidas em termos de redundância de
backup (quantos backups) ou uma janela de recuperação (quanto tempo).
Modo de Manutenção
● Políticas de Retenção
● Baseada em Redundância
Em uma política de retenção é a configuração que determina quantos backups
a serem mantidos:
Conforme o exemplo, a política de retenção aplicada, baseada em redundância,
mantém no mínimo 3 backups.
retention_policy = REDUNDANCY 3
Modo de Manutenção
● Políticas de Retenção
● Baseada em Redundância
Obs.: Destacado em vermelho a palavra “OBSOLETE” significa que os backups
em questão estão obsoletos e são passíveis de serem deletados.
$ barman list­backup pg
pg 20130721T195414 ­ Sun Jul 21 19:54:20 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 2.0 KiB
pg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB
pg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 5.0 KiB ­ OBSOLETE
pg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETE
pg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 1.0 MiB ­ OBSOLETE
Modo de Manutenção
● Políticas de Retenção
● Baseada em Janela de Recuperação
Uma janela de recuperação é um tipo de política de retenção de backup do
Barman em que é especificado um período para que o Barman assegure a
retenção de backups e/ou arquivos de WAL arquivados:
Conforme o exemplo, a política de retenção aplicada, baseada em janela de
recuperação, mantém backups feitos em até uma semana.
retention_policy = RECOVERY WINDOW OF 1 WEEKS
Modo de Manutenção
● Políticas de Retenção
● Baseada em Janela de Recuperação
$ barman list­backup pg
pg 20130728T110724 ­ Sun Jul 28 11:07:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130725T205248 ­ Thu Jul 25 20:52:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130723T231858 ­ Tue Jul 23 23:19:05 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B
pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 2.0 KiB
pg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETE
pg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 5.0 KiB ­ OBSOLETE
pg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETE
pg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 1.0 MiB ­ OBSOLETE
Modo de Manutenção
● Configuração e Sintaxe
A sintaxe geral para política de retenção de backups é a seguinte:
retention_policy  =  {REDUNDANCY  value  |  RECOVERY  WINDOW  OF  value 
{DAYS | WEEKS | MONTHS}}
Por padrão, retention_policy tem seu valor vazio (nenhuma política de
retenção).
Hook Scripts
A partir da versão 1.1.0, o Barman permite ao DBA rodar hook scripts antes
e depois de um backup.
Podem ser configurados na configuração global ou ser sobrescrita por
configurações individuais de servidores.
● pre_backup_script: hook script carregado antes de ser feito um
backup.
● post_backup_script: hook script carregado depois que um backup
termina.
A definição do script é passada ao shell e pode retornar qualquer código de
saída.
Variáveis de Ambiente
● BARMAN_BACKUP_DIR: Diretório de backup;
● BARMAN_BACKUP_ID: Backup ID;
● BARMAN_CONFIGURATION: Arquivo de configuração utilizado pelo
Barman;
● BARMAN_ERROR: Mensagem de erro, se houver (apenas para a fase pós
backup);
● BARMAN_PHASE: Fase do hook script, ou pré (pre) ou pós (post);
● BARMAN_PREVIOUS_ID: ID do backup anterior (se existir);
● BARMAN_SERVER: Nome do servidor;
● BARMAN_STATUS: Estado do backup;
● BARMAN_VERSION: Versão do Barman.
Futuras Implementações
● !! Backup incremental !!
● ! Suporte a streaming replication !
● Sandbox recovery, com a opção --pgdump
● Integração com o ambiente Amazon S3
● Versão Windows (e precisa???)
Obrigado! :)
Juliano Atanazio
juliano.atanazio@serpro.gov.br

Mais conteúdo relacionado

Mais procurados

Advanced Postgres Monitoring
Advanced Postgres MonitoringAdvanced Postgres Monitoring
Advanced Postgres MonitoringDenish Patel
 
NGINX: HTTP/2 Server Push and gRPC
NGINX: HTTP/2 Server Push and gRPCNGINX: HTTP/2 Server Push and gRPC
NGINX: HTTP/2 Server Push and gRPCNGINX, Inc.
 
PostgreSQL - Haute disponibilité avec Patroni
PostgreSQL - Haute disponibilité avec PatroniPostgreSQL - Haute disponibilité avec Patroni
PostgreSQL - Haute disponibilité avec Patronislardiere
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick GuideJi-Woong Choi
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationAlexey Lesovsky
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Anastasia Lubennikova
 
Splash screen for Embedded Linux 101: How to customize your boot sequence
 Splash screen for Embedded Linux 101: How to customize your boot sequence Splash screen for Embedded Linux 101: How to customize your boot sequence
Splash screen for Embedded Linux 101: How to customize your boot sequencePierre-jean Texier
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniZalando Technology
 
Introduction to Linux
Introduction to Linux Introduction to Linux
Introduction to Linux Harish R
 
The productivity brought by Clojure
The productivity brought by ClojureThe productivity brought by Clojure
The productivity brought by ClojureLaurence Chen
 
re:Invent 2019 BPF Performance Analysis at Netflix
re:Invent 2019 BPF Performance Analysis at Netflixre:Invent 2019 BPF Performance Analysis at Netflix
re:Invent 2019 BPF Performance Analysis at NetflixBrendan Gregg
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar PradhanAwesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar PradhanAjeet Singh Raina
 
PostgreSQL Extensions: A deeper look
PostgreSQL Extensions:  A deeper lookPostgreSQL Extensions:  A deeper look
PostgreSQL Extensions: A deeper lookJignesh Shah
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
Kafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and GrafanaKafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and Grafanawonyong hwang
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 

Mais procurados (20)

Advanced Postgres Monitoring
Advanced Postgres MonitoringAdvanced Postgres Monitoring
Advanced Postgres Monitoring
 
NGINX: HTTP/2 Server Push and gRPC
NGINX: HTTP/2 Server Push and gRPCNGINX: HTTP/2 Server Push and gRPC
NGINX: HTTP/2 Server Push and gRPC
 
PostgreSQL and RAM usage
PostgreSQL and RAM usagePostgreSQL and RAM usage
PostgreSQL and RAM usage
 
WTF is Reactive Programming
WTF is Reactive ProgrammingWTF is Reactive Programming
WTF is Reactive Programming
 
PostgreSQL - Haute disponibilité avec Patroni
PostgreSQL - Haute disponibilité avec PatroniPostgreSQL - Haute disponibilité avec Patroni
PostgreSQL - Haute disponibilité avec Patroni
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
Backup and-recovery2
Backup and-recovery2Backup and-recovery2
Backup and-recovery2
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)
 
Splash screen for Embedded Linux 101: How to customize your boot sequence
 Splash screen for Embedded Linux 101: How to customize your boot sequence Splash screen for Embedded Linux 101: How to customize your boot sequence
Splash screen for Embedded Linux 101: How to customize your boot sequence
 
High Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando PatroniHigh Availability PostgreSQL with Zalando Patroni
High Availability PostgreSQL with Zalando Patroni
 
Introduction to Linux
Introduction to Linux Introduction to Linux
Introduction to Linux
 
The productivity brought by Clojure
The productivity brought by ClojureThe productivity brought by Clojure
The productivity brought by Clojure
 
re:Invent 2019 BPF Performance Analysis at Netflix
re:Invent 2019 BPF Performance Analysis at Netflixre:Invent 2019 BPF Performance Analysis at Netflix
re:Invent 2019 BPF Performance Analysis at Netflix
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar PradhanAwesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
 
PostgreSQL Extensions: A deeper look
PostgreSQL Extensions:  A deeper lookPostgreSQL Extensions:  A deeper look
PostgreSQL Extensions: A deeper look
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
Kafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and GrafanaKafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and Grafana
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 

Destaque

PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)
PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)
PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)Gabriele Bartolini
 
PostgreSQL Disaster Recovery with Barman
PostgreSQL Disaster Recovery with BarmanPostgreSQL Disaster Recovery with Barman
PostgreSQL Disaster Recovery with BarmanGabriele Bartolini
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Juliano Atanazio
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosJuliano Atanazio
 
Development is Production Too
Development is Production TooDevelopment is Production Too
Development is Production Toojgoulah
 
Postgres performance for humans
Postgres performance for humansPostgres performance for humans
Postgres performance for humansCraig Kerstiens
 
Safely Drinking from the Data Waterhose
Safely Drinking from the Data WaterhoseSafely Drinking from the Data Waterhose
Safely Drinking from the Data WaterhoseJan Schaumann
 
Odoo disaster recovery with barman
Odoo disaster recovery with barmanOdoo disaster recovery with barman
Odoo disaster recovery with barmanOdoo
 
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)Gabriele Bartolini
 
Simple Log Analysis and Trending
Simple Log Analysis and TrendingSimple Log Analysis and Trending
Simple Log Analysis and TrendingMike Brittain
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQLKonstantin Gredeskoul
 
Scaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went RightScaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went RightRoss Snyder
 
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQLFrom Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQLKonstantin Gredeskoul
 
Etsy Case Study
Etsy Case StudyEtsy Case Study
Etsy Case StudySlideShare
 
Design for Continuous Experimentation
Design for Continuous ExperimentationDesign for Continuous Experimentation
Design for Continuous ExperimentationDan McKinley
 

Destaque (19)

Fancy pants
Fancy pantsFancy pants
Fancy pants
 
PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)
PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)
PostgreSQL Disaster Recovery with Barman (PGConf.EU 2013)
 
PostgreSQL Disaster Recovery with Barman
PostgreSQL Disaster Recovery with BarmanPostgreSQL Disaster Recovery with Barman
PostgreSQL Disaster Recovery with Barman
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
 
Development is Production Too
Development is Production TooDevelopment is Production Too
Development is Production Too
 
Postgres performance for humans
Postgres performance for humansPostgres performance for humans
Postgres performance for humans
 
Safely Drinking from the Data Waterhose
Safely Drinking from the Data WaterhoseSafely Drinking from the Data Waterhose
Safely Drinking from the Data Waterhose
 
Odoo disaster recovery with barman
Odoo disaster recovery with barmanOdoo disaster recovery with barman
Odoo disaster recovery with barman
 
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
 
PGP for Smarties
PGP for SmartiesPGP for Smarties
PGP for Smarties
 
Simple Log Analysis and Trending
Simple Log Analysis and TrendingSimple Log Analysis and Trending
Simple Log Analysis and Trending
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL
 
Ipv6 basics
Ipv6 basicsIpv6 basics
Ipv6 basics
 
Scaling postgres
Scaling postgresScaling postgres
Scaling postgres
 
Scaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went RightScaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went Right
 
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQLFrom Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
 
Etsy Case Study
Etsy Case StudyEtsy Case Study
Etsy Case Study
 
Design for Continuous Experimentation
Design for Continuous ExperimentationDesign for Continuous Experimentation
Design for Continuous Experimentation
 

Semelhante a Gerenciamento de Backups PostgreSQL com pgbarman

PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
Apresentação PGDAY - instalação e configuração - PostgreSQL
Apresentação PGDAY - instalação e configuração - PostgreSQLApresentação PGDAY - instalação e configuração - PostgreSQL
Apresentação PGDAY - instalação e configuração - PostgreSQLJohnes Castro
 
Capítulo 16 rsyslog
Capítulo 16   rsyslogCapítulo 16   rsyslog
Capítulo 16 rsyslogPaulo Kutwak
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxSaveincloud
 
Barman PGBR2017
Barman PGBR2017Barman PGBR2017
Barman PGBR2017wind39
 
Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxyFernando Ike
 
Gerenciamento de Pacotes no Linux
Gerenciamento de Pacotes no LinuxGerenciamento de Pacotes no Linux
Gerenciamento de Pacotes no LinuxElexsandro Rangel
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Alta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdAlta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdFrederico Madeira
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioCarlos Melo
 
Debian 6: Instalação e Hardening
Debian 6: Instalação e HardeningDebian 6: Instalação e Hardening
Debian 6: Instalação e HardeningBruna Griebeler
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxThiago Paes
 

Semelhante a Gerenciamento de Backups PostgreSQL com pgbarman (20)

PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
Apresentação PGDAY - instalação e configuração - PostgreSQL
Apresentação PGDAY - instalação e configuração - PostgreSQLApresentação PGDAY - instalação e configuração - PostgreSQL
Apresentação PGDAY - instalação e configuração - PostgreSQL
 
Capítulo 16 rsyslog
Capítulo 16   rsyslogCapítulo 16   rsyslog
Capítulo 16 rsyslog
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginx
 
Barman PGBR2017
Barman PGBR2017Barman PGBR2017
Barman PGBR2017
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 
Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxy
 
Gerenciamento de Pacotes no Linux
Gerenciamento de Pacotes no LinuxGerenciamento de Pacotes no Linux
Gerenciamento de Pacotes no Linux
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Alta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdAlta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e Drbd
 
Trab linux+sarg
Trab linux+sargTrab linux+sarg
Trab linux+sarg
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primário
 
Debian 6: Instalação e Hardening
Debian 6: Instalação e HardeningDebian 6: Instalação e Hardening
Debian 6: Instalação e Hardening
 
Proftpd
ProftpdProftpd
Proftpd
 
Php WatchDog
Php WatchDogPhp WatchDog
Php WatchDog
 
Unidade5 roteiro
Unidade5 roteiroUnidade5 roteiro
Unidade5 roteiro
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 
Unidade5 roteiro
Unidade5 roteiroUnidade5 roteiro
Unidade5 roteiro
 
Gerencia Básica Gnu/Linux
Gerencia Básica Gnu/LinuxGerencia Básica Gnu/Linux
Gerencia Básica Gnu/Linux
 

Mais de Juliano Atanazio

PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLJuliano Atanazio
 
PostgreSQL: How to Store Passwords Safely
PostgreSQL: How to Store Passwords SafelyPostgreSQL: How to Store Passwords Safely
PostgreSQL: How to Store Passwords SafelyJuliano Atanazio
 
Neutralizing SQL Injection in PostgreSQL
Neutralizing SQL Injection in PostgreSQLNeutralizing SQL Injection in PostgreSQL
Neutralizing SQL Injection in PostgreSQLJuliano Atanazio
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQLJuliano Atanazio
 

Mais de Juliano Atanazio (7)

PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQL
 
Por que FreeBSD?
Por que FreeBSD?Por que FreeBSD?
Por que FreeBSD?
 
PostgreSQL: How to Store Passwords Safely
PostgreSQL: How to Store Passwords SafelyPostgreSQL: How to Store Passwords Safely
PostgreSQL: How to Store Passwords Safely
 
Neutralizing SQL Injection in PostgreSQL
Neutralizing SQL Injection in PostgreSQLNeutralizing SQL Injection in PostgreSQL
Neutralizing SQL Injection in PostgreSQL
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQL
 

Gerenciamento de Backups PostgreSQL com pgbarman

  • 3. Apresentação ● O que é Barman (Backup and Recovery Manager) é uma ferramenta open source de administração para recuperação de disastre de servidores PostgreSQL escrita em Python. Permite fazer backups remotos de múltiplos servidores em ambientes críticos de negócios e auxilia DBAs durante a fase de recuperação. Dentre seus mais úteis recursos incluem backup de catálogos, políticas de retenção, recuperação remota, arquivamento e compressão de arquivos de WAL. O Barman foi desenvolvido e é mantido pelos profissionais PostgreSQL da 2ndQuadrant.
  • 4. Apresentação ● Características e Objetivos ➔ Backup físico completo a quente de um servidor PostgreSQL; ➔ Gerenciamento de backups de múltiplos servidores PostgreSQL; ➔ Recuperação local e remota de um backup; ➔ Suporte SSH para operações remotas; ➔ Informações e estado do servidor; ➔ Compressão de arquivos de WAL (bzip, gzip ou customizado); ➔ Integração com ferramentas padronizadas de arquivamento (e. g. tar);
  • 5. Apresentação ● Características e Objetivos ➔ Hook scripts de backup (pre/post); ➔ Armazenamento local de metadados; ➔ Um simples arquivo INI de configuração; ➔ Point-In-Time-Recovery (PITR); ➔ Backup remoto de um servidor PostgreSQL; ➔ Gerenciamento de backups da base e arquivos de WAL por um catálogo; ➔ Totalmente escrito em Python; ➔ Informações gerais de uso de disco de backup; ➔ Diagnósticos do servidor para backup; ➔ rsync sobre ssh para sincronização de arquivos e transferências.
  • 6. Apresentação ● Licença Barman é propriedade exclusiva da 2ndQuadrant Itália e seu código é distribuído sob a licença GPLv3. Contribuições ao Barman são bem vindas, e serão listadas no arquivo AUTHORS.
  • 7. Apresentação ● Suporte Site oficial: http://www.pgbarman.org Blog: http://www.pgbarman.org/blog/ Lista de discussão: https://groups.google.com/group/pgbarman Canal IRC: irc://irc.freenode.net/barman Suporte de Serviços da 2ndQuadrant FAQ: http://www.pgbarman.org/FAQ/ Documentação oficial: http://www.pgbarman.org/documentation/
  • 8. Cenário de Testes Hostname: backup IP: 192.168.7.70 System User: barman Hostname: pg IP: 192.168.7.71 System User: postgres
  • 9. Instalação ● Requisitos do Sistema ➔ Linux/Unix ➔ Python 2.6 or 2.7 ➔ Módulos Python: ➔ argcomplete ➔ argh >= 0.21.2 ➔ psycopg2 (driver PostgreSQL para Python) ➔ python-dateutil < 2.0 (desde a versão 2.0 requer Python 3) ➔ distribute (optional) ➔ PostgreSQL >= 8.4 ➔ rsync >= 3.0.4
  • 10. Instalação ● Linux ➔ Via Código Fonte Respectivamente, criação de grupo* e usuário* de sistema: Instalação de pacotes necessários: *Próximos IDs de sistema para grupo e usuário # groupadd ­g 105 barman # useradd ­u 102 ­g barman ­s /bin/bash ­d /var/lib/barman  ­k /etc/skel ­m barman # aptitude ­y install  python­{argcomplete,argh,argparse,dateutil,psycopg2}  rsync bash­completion postgresql­client­9.2
  • 11. Instalação ● Linux ➔ Via Código Fonte Baixando o código-fonte: # cd /usr/src/ # wget ­c   http://tenet.dl.sourceforge.net/project/pgbarman/1.2.2/barman­ 1.2.2.tar.gz
  • 12. Instalação ● Linux ➔ Via Código Fonte Descompactação: Entrar no diretório do código fonte: Execução do script Python de instalação (build): Criação de diretórios de manuais (1 e 5), diretório de configuração de servidores PostgreSQL e diretório de logs do Barman : # tar xvf barman­1.2.2.tar.gz # cd barman­1.2.2/ # ./setup.py build # mkdir ­p /usr/local/man/{man1,man5} /etc/barman.d  /var/log/barman
  • 13. Instalação ● Linux ➔ Via Código Fonte Cópia dos arquivos de manuais para os respectivos diretórios: Execução do script Python de instalação (install):: Cópia do arquivo de bash completion: # cp doc/barman.1 /usr/local/man/man1/ # cp doc/barman.5 /usr/local/man/man5/ # ./setup.py install # cp scripts/barman.bash_completion /etc/bash_completion.d/barman
  • 14. Instalação ● Linux ➔ Via Código Fonte Cópia do arquivo de configuração para o diretório do usuário de sistema barman: Criação de link para o arquivo de configuração em /etc: Permissões, grupo e usuário donos de diretórios: # cp doc/barman.conf ~barman/ # ln ­s ~barman/barman.conf  /etc/ # chmod ­R 770 ~barman /etc/barman.d  /var/log/barman # chown ­R barman: ~barman /etc/barman.d  /var/log/barman
  • 15. Instalação ● Linux ➔ Via Código Fonte Utilizando o usuário de sistema barman para testar o man: Criação da estrutura de diretórios de backup para o servidor pg: # su ­ barman $ man barman $ man 5 barman $ mkdir ­pm 0700 /var/lib/barman/bkp/pg/incoming/
  • 16. Instalação ● Linux (Servidor PostgreSQL) ➔ Via Código Fonte Instalação do rsync: Arquivo pg_hba.conf (adicionar): Arquivo postgresql.conf (alterar): # aptitude install rsync host    all             barman          192.168.7.70/32  md5 wal_level = 'archive'  archive_mode = on archive_command = 'scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%f'
  • 17. Instalação ● Linux (Servidor PostgreSQL) ➔ Via Código Fonte Utilizando o usuário de sistema postgres para criar o usuário barman no cluster e sua senha: Reinicialização do serviço (como root): # su ­ postgres $ psql ­c "CREATE ROLE barman LOGIN SUPERUSER PASSWORD 'senha';" # service postgresql restart
  • 18. Configuração ● Comunicação SSH Bidirecional Em ambos servidores, criar a chave SSH para ser utilizada na comunicação sem senha: $ ssh­keygen ­t rsa ­P '' ­f ~/.ssh/id_rsa Usuário barman Usuário postgres
  • 19. Configuração ● Comunicação SSH Bidirecional No servidor Barman Inserir a chave pública no conteúdo do arquivo de chaves autorizadas no servidor PostreSQL, no usuário postgres: Garantir que o usuário postgres seja dono do diretório .ssh: $ cat ~barman/.ssh/id_rsa.pub | ssh root@pg "cat ­ >>  ~postgres/.ssh/authorized_keys" $ ssh root@pg "chown ­R postgres: ~postgres/.ssh"
  • 20. Configuração ● Comunicação SSH Bidirecional No servidor Barman Ajuste de permissão 0700 ao diretório .ssh: Ajuste de permissão 0600 aos araquivos do diretório .ssh: $ ssh root@pg "chmod 0600 ­R  ~postgres/.ssh/*" ssh root@pg "chmod 0700 ~postgres/.ssh"
  • 21. Configuração ● Comunicação SSH Bidirecional No servidor PostgreSQL Inserir a chave pública no conteúdo do arquivo de chaves autorizadas no servidor Barman, no usuário barman: Garantir que o usuário postgres seja dono do diretório .ssh: $ cat ~postgres/.ssh/id_rsa.pub | ssh root@backup "cat ­ >>  ~barman/.ssh/authorized_keys" $ ssh root@backup "chown ­R barman: ~barman/.ssh"
  • 22. Configuração ● Comunicação SSH Bidirecional No servidor PostgreSQL Ajuste de permissão 0700 ao diretório .ssh: Ajuste de permissão 0600 aos araquivos do diretório .ssh: $ ssh root@backup "chmod 0600 ­R  ~barman/.ssh/*" ssh root@backup "chmod 0700 ~barman/.ssh"
  • 23. Configuração ● Comunicação SSH Bidirecional Testando No servidor de banco de dados com o usuário postgres: No servidor de backup com o usuário barman: $ ssh barman@backup $ ssh postgres@pg
  • 24. Configuração ● Diretório de Backup O Barman precisa de um diretório principal de backup para armazenar todos backups, através do qual pode-se definir uma pasta para cada servidor que fará backup e para cada tipo de recurso (backup ou segmentos WAL, por instância). O arquivo de configuração define o parâmetro barman_home, que é o diretório onde o Barman armazenará todos os backups por padrão. Esse diretório é o “home” para o usuário de sistema do Barman. Geralmente é /srv/barman ou /var/lib/barman.
  • 25. Configuração ● Configuração Básica No diretório doc (dentro do diretório dos sources) há um arquivo com configurações mínimas, que deve ser usado como modelo para /etc/barman.conf ou ~/.barman.conf. Usualmente, o primeiro se aplica a todos usuários no servidor de backup, enquanto o último aplica-se ao usuário barman. A partir da versão 1.2.1 pode ser usado o /etc/barman/barman.conf como arquivo de configuração para o sistema.
  • 26. Configuração ● Configuração Básica O arquivo de configuração segue o formato INI padrão e se divide em: - Uma seção para configurações gerais (identificada pela etiqueta (label) barman); - Uma seção para cada servidor PostgreSQL, cada uma identificada por uma etiqueta. "all" e "barman" são palavras reservadas e não podem ser usadas como labels de servidores
  • 27. Configuração ● Configuração Básica A partir da versão 1.1.2 é possível especificar um diretório para arquivos de configuração, similarmente a outras aplicações Linux, através do parâmetro configuration_files_directory (vazio por padrão). O Barman vai ler todos os arquivos com a extensão .conf que estiverem nessa pasta. Por exemplo, se o valor do parâmetro configuration_files_directory for /etc/barman.d, pode-se designar um arquivo por servidor cada um contendo sua etiqueta referente à sua seção. Caso contrário, pode ser utilizado o padrão do Barman que é especificar várias seções no mesmo arquivo de configuração
  • 31. Configuração ● Arquivo /etc/barman.d/pg.conf Nota-se que há configurações do servidor pg que foram sobrescritas. ; Número mínimo de backups mantidos minimum_redundancy = 0 ; Política de retenção retention_policy =
  • 32. Uso do pgbarman ● Servidores ➔ Listando os Servidores O seguinte comando exibe a lista de todos os servidores disponíveis: $ barman list­server pg – Servidor PostgreSQL pg
  • 33. Uso do pgbarman ● Servidores ● Mostra a Configuração de um Servidor Continua... $ barman show­server pg Server pg: active: true description: Servidor PostgreSQL pg ssh_command: ssh postgres@pg conninfo: host=pg user=barman password=senha dbname=postgres backup_directory: /var/lib/barman/bkp/pg basebackups_directory: /var/lib/barman/bkp/pg/base wals_directory: /var/lib/barman/bkp/pg/wals incoming_wals_directory: /var/lib/barman/bkp/pg/incoming lock_file: /var/lib/barman/bkp/pg/pg.lock compression: custom custom_compression_filter: xz ­z9 custom_decompression_filter: xz ­d
  • 34. Uso do pgbarman ● Servidores ● Mostra a Configuração de um Servidor retention_policy_mode: auto retention_policy:  wal_retention_policy: main pre_backup_script: None post_backup_script: None minimum_redundancy: 0 bandwidth_limit: 0 tablespace_bandwidth_limit: None current_xlog: 000000020000000000000013 last_shipped_wal: None archive_command: scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%f server_txt_version: 9.2.4 data_directory: /var/lib/postgresql/9.2/main archive_mode: on config_file: /etc/postgresql/9.2/main/postgresql.conf hba_file: /etc/postgresql/9.2/main/pg_hba.conf ident_file: /etc/postgresql/9.2/main/pg_ident.conf
  • 35. Uso do pgbarman ● Servidores ● Checagem de Diagnóstico Pode-se checar se a conexão para um dado servidor está funcionando apropriadamente com o seguinte comando: $ barman check pg Server pg: ssh: OK PostgreSQL: OK archive_mode: OK archive_command: OK directories: OK retention policy settings: OK compression settings: OK minimum redundancy requirements: OK (have 5 backups, expected at least 0)
  • 36. Uso do pgbarman ● Backups ● Backup IDs Uma identificação de backup ou backup ID é uma nomenclatura de backup para um dado servidor que tem seu nome formado a partir da data e hora que foi iniciado. Dado o backup ID: 20130520T235823 <data>T<hora> YYYYmmDDTHHMMSS
  • 37. Uso do pgbarman ● Backups ● Backup IDs <data> YYYYY - Ano com quatro dígitos: 2013 mm - Mês com dois dígitos: 05 DD - Dia com dois dígitos: 20 <hora> HH - Hora em formato 24h: 23 MM - Minutos: 58 SS - Segundos: 23 YYYYmmDDTHHMMSSYYYYmmDDTHHMMSS
  • 38. Uso do pgbarman ● Backups ● Apelidos de Backup IDs A partir da versão 1.1.12, pode usar qualquer um dos seguintes apelidos para identificar um backup em particular para um dado servidor. De acordo com a ordem cronológica: - latest/last: o último backup disponível para o servidor. - oldest/first: o backup mais antigo de um servidor. Esses apelidos podem ser usados com qualquer um dos seguintes comandos do barman: show­backup, delete, list­files ou recover.
  • 39. Uso do pgbarman ● Backups ● Execução de um Backup Completo $ barman backup pg Starting backup for server pg in /var/lib/barman/bkp/pg/base/20130721T183941 Backup start at xlog location: 0/14000020 (000000020000000000000014, 00000020) Copying files. Copy done. Asking PostgreSQL server to finalize the backup. Backup end at xlog location: 0/140000A8 (000000020000000000000014, 000000A8) Backup completed
  • 40. Uso do pgbarman ● Backups ● Listando Backups por Servidor $ barman list­backup pg pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130713T101241 ­ Sat Jul 13 10:12:48 2013 ­ Size: 32.0 MiB ­ WAL Size: 10.0 MiB
  • 41. Uso do pgbarman ● Backups ● Exibindo Informações de um Backup Continua... $ barman show­backup pg oldest Backup 20130713T101241:   Server Name       : pg   Status            : DONE   PostgreSQL Version: 90204   PGDATA directory  : /var/lib/postgresql/9.2/main   Base backup information:     Disk usage      : 36.0 MiB     Timeline        : 1     Begin WAL       : 000000010000000000000005     End WAL         : 000000010000000000000005     WAL number      : 1     Begin time      : 2013­07­13 10:12:41.253963     End time        : 2013­07­13 10:12:48.463451     Begin Offset    : 32     End Offset      : 168     Begin XLOG      : 0/5000020     End XLOG        : 0/50000A8
  • 42. Uso do pgbarman ● Backups ● Exibindo Informações de um Backup   WAL information:     No of files     : 5     Disk usage      : 10.0 MiB     Last available  : 00000001000000000000000F   Catalog information:     Retention Policy: not enforced     Previous Backup : ­ (this is the oldest base backup)     Next Backup     : 20130713T103810
  • 43. Uso do pgbarman ● Backups ● Listando Arquivos de um Backup $ barman list­files pg 20130719T211849 /var/lib/barman/bkp/pg/base/20130719T211849/backup.info /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/PG_VERSION /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/backup_label /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/backup_label.old /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/environment /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_ctl.conf /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_hba.conf /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_ident.conf /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/postgresql.conf /var/lib/barman/bkp/pg/base/20130719T211849/pgdata/postgresql.conf.origin . . .
  • 44. Uso do pgbarman ● Backups ● Apagando um Backup $ barman delete pg first Deleting backup 20130713T101241 for server pg Delete associated WAL segments: 000000010000000000000001 000000010000000000000002 000000010000000000000003 000000010000000000000004 000000010000000000000005 000000010000000000000005.00000020.backup 000000010000000000000006 00000001000000000000000C 00000001000000000000000D 00000001000000000000000E 00000001000000000000000F Done
  • 45. Uso do pgbarman ● Restauração Completa de um Servidor ● Local Não foi instalado o servidor PostgreSQL na máquina de backup do laboratório. Se tivesse sido instalado, poderia levantar o banco localmente utilizando o diretório /tmp/teste como cluster do Postgres: $ barman recover pg 20130719T211849 /tmp/teste Processing xlog segments for pg 00000002.history 000000020000000000000005 000000020000000000000006 . . . $ pg_ctl ­D /tmp/teste
  • 46. Uso do pgbarman ● Restauração Completa de um Servidor ● Remota $ barman recover ­­remote­ssh­command="ssh postgres@pg" pg last  /var/lib/postgresql/9.2/main barman recover ­­remote­ssh­command="ssh postgres@pg" pg last  /var/lib/postgresql/9.2/data Starting remote restore for server pg using backup 20130721T183941  Destination directory: /var/lib/postgresql/9.2/data Copying the base backup. Copying required wal segments. The archive_command was set to 'false' to prevent data losses. Your PostgreSQL server has been successfully prepared for recovery! . . .
  • 47. Uso do pgbarman ● Restauração Completa de um Servidor ● PITR $ barman recover ­­remote­ssh­command="ssh postgres@pg" ­­target­time "2013­07­ 21 19:00:00" pg last /var/lib/postgresql/9.2/main Starting remote restore for server pg using backup 20130721T183941  Destination directory: /var/lib/postgresql/9.2/main Doing PITR. Recovery target time: '2013­07­21 19:00:00' Copying the base backup. Copying required wal segments. Generating recovery.conf . . .
  • 48. Limitando o Uso de Largura de Banda de I/O A partir da versão 1.2.1 é possível limitar o uso de largura de banda através da opção bandwidth_limit (global/por servidor), especificando o máximo em kb/s (kilobytes por segundo). O padrão é 0 (zero), sem limite. Sintaxe de configuração: Obs.: Esse recurso foi proposto por Gregory Smith tablespace_bandwidth_limit = tbname:bwlimit[, tbname:bwlimit, ...]
  • 49. Limitando o Uso de Largura de Banda de I/O Esse parâmetro aceita uma lista separada de pares que são respectivamente o nome do tablespace e seu limite correspondente (em kb/s). Ao fazer backup de um servidor, o Barman tentará localizar os tablespaces declarados. Se encontrar, o limite configurado será forçado, caso contrário o padrão será aplicado.
  • 50. Modo de Manutenção Operações de manutenção fazem compressão de arquivos do WAL e os move do diretório de entrada (incoming) para o de arquivamento (wal), além de aplicar as políticas de retenção. O seguinte comando pode ser utilizado manualmente, mas é indicado para ser incluído nas rotinas do cron do sistema operacional. $ barman cron Processing xlog segments for pg 00000003.history 000000030000000000000015 000000030000000000000016 000000030000000000000017 000000030000000000000017.00000020.backup 000000030000000000000018 . . .
  • 51. Modo de Manutenção ● Compressão do WAL A compressão dos arquivos do WAL se dá pela execução do comando cron do barman (como visto anteriormente). Essa compressão é feita conforme o arquivo de configuração (global ou por servidor). O parâmetro compression aceita três opções: ➔ gzip: Compressão Gzip (requer gzip); ➔ bzip2: Compressão Bzip2 (requer bzip2); ➔ custom: Para compressão customizada, que requer mais dois parâmetros: ➔ custom_compression_filter: Filtro de compressão; ➔ custom_decompression_filter: Filtro de descompressão.
  • 52. Modo de Manutenção ● Redundância Mínima de Segurança A partir da versão 1.2.0, pode-se definir um número mínimo de backups a serem mantidos pelo parâmetro de configuração minimum_redundancy, por padrão é 0. Pode ser feito como configuração global ou por servidor. É uma proteção contra operações de remoções acidentais de backups (barman delete). Importante: Tomar cuidado para que políticas de retenção não conflitem com a redundância mínima de segurança. Verifique os logs do Barman regularmente sobre isso.
  • 53. Modo de Manutenção ● Políticas de Retenção Desde a versão 1.2.0, o Barman suporta políticas de retenção para backups. Uma política de retenção de backup é uma política definida pelo usuário de quanto tempo backups precisam ser retidos para procedimentos de recuperação. As políticas de retenção podem ser definidas em termos de redundância de backup (quantos backups) ou uma janela de recuperação (quanto tempo).
  • 54. Modo de Manutenção ● Políticas de Retenção ● Baseada em Redundância Em uma política de retenção é a configuração que determina quantos backups a serem mantidos: Conforme o exemplo, a política de retenção aplicada, baseada em redundância, mantém no mínimo 3 backups. retention_policy = REDUNDANCY 3
  • 55. Modo de Manutenção ● Políticas de Retenção ● Baseada em Redundância Obs.: Destacado em vermelho a palavra “OBSOLETE” significa que os backups em questão estão obsoletos e são passíveis de serem deletados. $ barman list­backup pg pg 20130721T195414 ­ Sun Jul 21 19:54:20 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 2.0 KiB pg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB pg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 5.0 KiB ­ OBSOLETE pg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETE pg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 1.0 MiB ­ OBSOLETE
  • 56. Modo de Manutenção ● Políticas de Retenção ● Baseada em Janela de Recuperação Uma janela de recuperação é um tipo de política de retenção de backup do Barman em que é especificado um período para que o Barman assegure a retenção de backups e/ou arquivos de WAL arquivados: Conforme o exemplo, a política de retenção aplicada, baseada em janela de recuperação, mantém backups feitos em até uma semana. retention_policy = RECOVERY WINDOW OF 1 WEEKS
  • 57. Modo de Manutenção ● Políticas de Retenção ● Baseada em Janela de Recuperação $ barman list­backup pg pg 20130728T110724 ­ Sun Jul 28 11:07:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130725T205248 ­ Thu Jul 25 20:52:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130723T231858 ­ Tue Jul 23 23:19:05 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 B pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 2.0 KiB pg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETE pg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 5.0 KiB ­ OBSOLETE pg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETE pg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 1.0 MiB ­ OBSOLETE
  • 58. Modo de Manutenção ● Configuração e Sintaxe A sintaxe geral para política de retenção de backups é a seguinte: retention_policy  =  {REDUNDANCY  value  |  RECOVERY  WINDOW  OF  value  {DAYS | WEEKS | MONTHS}} Por padrão, retention_policy tem seu valor vazio (nenhuma política de retenção).
  • 59. Hook Scripts A partir da versão 1.1.0, o Barman permite ao DBA rodar hook scripts antes e depois de um backup. Podem ser configurados na configuração global ou ser sobrescrita por configurações individuais de servidores. ● pre_backup_script: hook script carregado antes de ser feito um backup. ● post_backup_script: hook script carregado depois que um backup termina. A definição do script é passada ao shell e pode retornar qualquer código de saída.
  • 60. Variáveis de Ambiente ● BARMAN_BACKUP_DIR: Diretório de backup; ● BARMAN_BACKUP_ID: Backup ID; ● BARMAN_CONFIGURATION: Arquivo de configuração utilizado pelo Barman; ● BARMAN_ERROR: Mensagem de erro, se houver (apenas para a fase pós backup); ● BARMAN_PHASE: Fase do hook script, ou pré (pre) ou pós (post); ● BARMAN_PREVIOUS_ID: ID do backup anterior (se existir); ● BARMAN_SERVER: Nome do servidor; ● BARMAN_STATUS: Estado do backup; ● BARMAN_VERSION: Versão do Barman.
  • 61. Futuras Implementações ● !! Backup incremental !! ● ! Suporte a streaming replication ! ● Sandbox recovery, com a opção --pgdump ● Integração com o ambiente Amazon S3 ● Versão Windows (e precisa???)