Escolar Documentos
Profissional Documentos
Cultura Documentos
com
Curso 801
Administração
PostgreSQL com Alta
Performance
Versão 2015_3.0
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Backup e Restauração
Objetivos da aula
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
IT Experience
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Backup pontual
backup;
➢ DUMP
Backups pontuais no PostgreSQL são feitos com o comando pg_dump, e seu uso
básico é: pg_dump [banco de dados] > [arquivo.dump]
Pode-se utilizar uma extensão .sql para dumps textuais. O pg_dump possui opções úteis
como -t (fazer backup apenas de uma tabela) e -F c (arquivo próprio do pg_restore,
comprimindo com zlib). As opções de conexão do psql são aceitas, como usuário,
hostname, porta e etc.
Backup pontual
O backup pode ser feito com o banco de dados funcionando, normalmente. Note,
porém, que durante o processo é feita uma cópia completa de cada tabela, o acesso a
disco será intenso, portanto, escolha horários de menor movimento transacional para
execução de dumps quando grandes tabelas estão envolvidas.
Scripts automatizados e agendados podem ser utilizados para backups, desde que
seja sempre verificada a saída do comando executado para garantir que não
aconteceram erros durante o processo.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Um usuário com direitos para tal deve criar o banco de dados conforme já
vimos em capítulo anterior. Se o banco de dados já existir, recomenda-se limpá-lo
primeiro, exceto se o dump foi criado com a opção de destruir objetos já existentes.
Crie um cluster novo com initdb. Utilize o psql como usuário postgres para
recuperação:
psql < arquivo.sql
Point-In-Time Recovey
● Apenas backup do cluster completo;
● Aplicações e usuários trabalhando;
● É contínuo e incremental;
A estratégia de backup PITR inicial pode ser feita com o servidor de banco de
dados funcionando normalmente. Como os arquivos de dados serão totalmente lidos
pelos comandos executados, tenha em mente que existirá um aumento do consumo
de I/O que pode afetar as transações normais. Prefira horários de baixo movimento
transacional para o backup inicial.
Point-In-Time Recovey
● Permite volta no tempo, desde o ponto de backup
inicial;
● Habilitar archive_mode;
10
●
wal_level=archive
● archive_mode = on
● archive_command = 'comando'
● Utilizar um archive_command;
archive_timeout
wal_level >= archive
● O comando deve retornar zero;
● Exemplo de comando:
'cp -i %p /dir/archives/%f < /dev/null'
● Pode-se enviar os arquivos para um servidor remoto,
via rede.
11
12
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
➢ Superusuário, psql:
SELECT pg_start_backup('label');
➢ Superusuário, psql:
SELECT pg_stop_backup;
13
14
➢ Copiar do backup;
➢ Criar recovery.conf:
15
● Pare o PostgreSQL.
● Limpe mova seu diretório do cluster.
● Copie todo o seu backup inicial para seu cluster original, lembre-se de
tablespaces.
● Crie um arquivo recovery.conf dentro do diretório do cluster. O conteúdo do
arquivo deve ser: restore_command = 'cp /dir/WAL/%f "%p"'
● Onde /dir/WAL é o diretório onde estão os arquivos WAL arquivados pelo
archive_command''.
●
Ajuste as permissões de seu \emph{cluster} com:
chmod -R 700 /dir/cluster/
chown -R postgres /dir/cluster/
recovery_target_name (string) -
pg_create_restore_point()
recovery_target_xid (string)
16
A sequência de comandos fará com que seu cluster seja recuperado por
completo até o último arquivo WAL existente no seu backup. Caso deseje voltar para
um momento específico no tempo, tenha em mente que não é possível voltar para
um momento antes do backup inicial. Para recuperações em momento no tempo,
insira a seguinte linha em recovery.conf:
recovery_target_time (timestamp)
Laboratório Dexter
Tarefas:
17
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Dump de banco de dados máquina DB Master
1# su - postgres
5$ less dexter_copy.sql
6$ less dexter_insert.sql
7$ less dexter_bin.dump
18
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Restauração através do comando psql máquina DB Master
1$ createdb dextertemp
3$ psql dextertemp
4=# \d
6=# \q
7$ dropdb dextertemp
8$ exit
19
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master
1# mkdir /pg_backup
2# mkdir /pg_backup/base
3# mkdir /pg_backup/arquivamento
20
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master
6# vim /etc/postgresql/9.4/main/postgresql.conf
....
wal_level = archive
archive_mode = on
archive_timeout = 60
21
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master
8# su - postgres
9$ psql
10 =# SELECT pg_start_backup('curso01');
11 =# \q
13 $ psql
22
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master
14 =# SELECT pg_stop_backup();
15 =# \q
16 $ ls -lh /pg_backup/base/
$ ls /pg_backup/arquivamento/
17
$ rm /pg_backup/base/postmaster.pid
18
19 $ rm -rf /pg_backup/base/pg_xlog/*
20 $ exit
23
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Restauração PITR máquina DB Master
2# su - postgres
3$ cp /var/lib/postgresql/9.4/main/pg_xlog/*
/pg_backup/arquivamento/
4$ mv /var/lib/postgresql/9.4/main
/var/lib/postgresql/9.4/main_old
5$ cp -av /pg_backup/base/
/var/lib/postgresql/9.4/main
24
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Restauração PITR máquina DB Master
$ vim /var/lib/postgresql/9.4/main/recovery.conf
6
$ exit
7
# tail -f /var/log/postgresql/postgresql-9.4-main.log
9
25
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Script de Backup PostgreSQL máquina DB Master
1# mkdir /srv/backup
3# cp /opt/curso/createDB-Backup.sql
/var/lib/postgresql
5# su - postgres
26
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Script de Backup PostgreSQL máquina DB Master
$ vim pgbackup.sh
7
#!/bin/bash
DATA=$(date +%d-%m-%Y)
HORA=$(date +%H:%M:%S)
BACKUPDIR=/srv/backup
bancos=$(psql -l | awk -F" " '{ print $1}' | grep -vE '^-|
^List|^Nome|^backup|^\||template[0|1]|^\(')
27
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Script de Backup PostgreSQL máquina DB Master
$ ./pgbackup.sh
9
$ ls -lR /srv/backup
10
28
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Restaurar tabela utilizando o Backup máquina DB Master
3$ cp /srv/backup/dexter.<DATA>.dump.gz .
4$ gzip -d dexter.<DATA>.dump.gz
7$ exit
29
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
30
Laboratório Dexter
Tarefas:
31
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina Backup
Instalar e Configurar servidor de Backup
# vim /etc/apt/sources.list
1
....
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg
main
# wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
2
# apt-get update
4
32
Roteiro de instalação:
Laboratório Dexter
Executar os comandos na
Configuração do Storage Barman (1/2) máquina Backup
3 # vim /etc/fstab
....
UUID=7b161c69-de2b-466b-ace2-f024b8e9beec
/var/lib/barman ext4 defaults 0 2
33
● Vamos utilizar o LVM e RAID que a máquina File Server possui, com uma área de
armazenamento de 40GB para receber os dados das máquinas DB Master e
Audit;
● A máquina possui um volume lógico de 40GB grupo storage com sistema EXT4;
● É preciso fazer a montagem da nova partição na home do usuário barman.;
● Configure a montagem automática na inicialização do sistema;
● Em nosso exemplo a partição possui apenas 40GB, podendo ser estendida com a
adição de novos discos no RAID.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Configuração do Storage Barman (2/2) máquina Backup
1 # mkdir /var/lib/barman/backups
2 # mkdir -p /var/lib/barman/backups/dbmaster/incoming
3 # mkdir -p /var/lib/barman/backups/audit/incoming
34
● Em seguida crie os diretórios para cada servidor que o Barman ira gerenciar os
backups;
● Para terminar altere a permissão de acesso para o usuário barman no ponto de
montagem.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Configuração do Barman (1/2) máquina Backup
# vim /etc/barman.conf
1
barman_home = /var/lib/barman/backups
compression = gzip
minimum_redundancy = 0
retention_policy =
35
Configuração do Barman
Laboratório Dexter
Executar os comandos na
Configuração do Barman (2/2) máquina Backup
[dbmaster]
compression = gzip
minimum_redundancy = 0
retention_policy =
36
Configuração do Barman
Para cada servidor Postgres é necessário criar uma sessão com um nome que
identifique seu cluster.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Configuração de chaves SSH (1/3) máquina DB Master
1 # su - postgres
2 $ ssh-keygen
5 $ exit
37
Laboratório Dexter
Executar os comandos na
Configuração de chaves SSH (2/3) máquina DB Master
8 $ su – postgres
9 $ ssh barman@backup.dexter.com.br
10 $ exit
38
Laboratório Dexter
Executar os comandos na
Configuração de chaves SSH (3/3) máquina Backup
2 # su - barman
3 $ ssh postgres@dbmaster.dexter.com.br
4 $ exit
39
A nossa meta é permitir que o usuário barman possa logar via ssh, sem
fornecer a senha do usuário postgres.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Configuração do Postgres (1/2) máquina DB Master
1 # su - postgres
2 $ psql
4 =# \q
5 $ exit
6 # vim /etc/postgresql/9.4/main/pg_hba.conf
40
Configuração do Postgres
Laboratório Dexter
Executar os comandos na
Configuração do Postgres (2/2) máquina DB Master
7# vim /etc/postgresql/9.4/main/postgresql.conf
Alterar:
archive_command = 'cp %p /pg_backup/arquivamento/%f
</dev/null'
Para:
archive_command = 'scp %p
barman@backup.dexter.com.br:/var/lib/barman/backups/dbmas
ter/incoming/%f'
8# service postgresql restart
41
Configuração do Postgres
Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (1/6) máquina Backup
Informativos:
# barman list-server
1
42
Comandos de gerenciamento
Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (2/6) máquina Backup
Backup Completo:
# barman backup dbmaster
1
43
Comandos de gerenciamento
Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (3/6) máquina Backup
3# su - barman
44
Comandos de gerenciamento
Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (4/6) máquina DB Master
6# cp -a /var/lib/postgresql/9.4/main /root
7# rm -rf /var/lib/postgresql/9.4/main
45
Comandos de gerenciamento
Laboratório Dexter
Executar os comandos nas
Comandos de Gerenciamento (5/6) máquinas Backup e DB Master
46
Comandos de gerenciamento
Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (6/6) máquina Backup
Remoção:
$ barman delete dbmaster <BACKUP_ID>
1
47
Comandos de gerenciamento
Apagando backup:
barman delete dbmaster <BACKUP_ID>
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
Restauração PITR (1/3) máquina DB Master
# su - postgres
1
$ createdb barman-test1
2
$ date
3
$ createdb barman-test2
4
$ date
5
48
A meta de recuperação pode ser especificado utilizando uma das três opções
abaixo:
●
--target-time TARGET_TIME: Define a recuperação a partir de um timestamp.
● --target-xid TARGET_XID: Define a recuperação a partir de um ID de transação.
● --target-name TARGET_NAME: Define a recuperação a partir de um nome criado
anteriormente com a função pg_create_restore_point(name)
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos nas
Restauração PITR (2/3) máquinas Backup e DB Master
4 $ psql -l
5 $ /usr/lib/postgresql/9.4/bin/pg_ctl stop -D
/etc/postgresql/9.4/main -m fast
49
Restauração PITR
Laboratório Dexter
Executar os comandos nas
Restauração PITR (3/3) máquinas Backup e DB Master
/var/lib/postgresql/9.4/main --remote-ssh-command="ssh
postgres@dbmaster.dexter.com.br" --target-time "2015-
10-17 19:05:26"
/etc/postgresql/9.4/main -m fast
$ psql -l
3
50
Restauração PITR
Próximos Passos
Mãos à obra!
51
Sidymar Ramos Prexedes / sprexedes@hotmail.com