Sie sind auf Seite 1von 36

Backup&RecoveryPostgreSQL9.

6-PITR

Uma das funcionalidades mais interessantes do PostgreSQL asuacapacidadede


trabalharcomoPITR(PointinTimeRecovery).

Esse guia vai apresentar um procedimento para a realizao dos backups para
permitir o uso do PITR. Alm disso, o procedimento ir apresentar como realizar os
backupsemoutrodiscoqueencontra-semontadonoservidordoPostgreSQL.

Todo o procedimento ser apresentado, tendo como base o PostgreSQL instalado


no servidor CentOS 7 e gravando os arquivos em NAS que tem suporte a NFS na
mesmarede.NessecasononossoNASumservidorrodandooFreeNAS.

Nota: Neste guia, o objetivo apresentaroprocedimentoderealizaodebackupe


restore, no est no escopo a montagem do volume onde ser armazenado o
backup. O guia parte da premissa de que j h um volume (ou pasta) destinada
paraarealizaodosbackups.

Mesmo que o seu cenrio seja diferente, o procedimento o mesmo, necessitando


quevocfaapequenosajustes,deacordocomoseuambiente.

Paraverificaroespaoemdisco,iremosutilizarocomando:

df -h

Extreme Learning - PostgreSQL 9.x DBA - 1



Nonossoambiente,constatamosquetemosespaodisponvelnovolume
/mnt/postgresql_backups

Entoiremoscriaraseguinteestruturadepastas:

postgresql_backups
base_backup
temp
wal
wal_archive

Emcadapastaseroarmazenadosarquivosespecficos:

base_backup-Arquivosbsicosdobackup(datafiles)
temp-Somenteparaarquivostemporrios
wal - Arquivos do Write Ahead Log. Esses so os arquivos que permitiro
nsrealizarmosumPITR.
wal_archive - Arquivos de backups que sero movidos do base para ele, no
processodebackup.Soarquivos"antigos".

Extreme Learning - PostgreSQL 9.x DBA - 2


Asequnciadecomandosparaacriaodessaestrutura:

mkdir /postgresql_backups
mkdir /postgresql_backups/base_backup
mkdir /postgresql_backups/temp
mkdir /postgresql_backups/wal
mkdir /postgresql_backups/wal_archive

Ao final, devemos alterar o owner dessas pastas (como estamos fazendo isso no
servidor Ubuntu que j tem um PostgreSQL instalado, vamos usar o usurio
postgres,masnoseuambiente,podeseroutrousurio).

chown postgres:postgres /postgresql_backups

Vamosdefinirtambmaspermissescorretas:

chmod -R 0700 postgresql_backups

pg_basebackup

Antesdeiniciarmosobackup,precisamosalteraralgunsparmetrosde
configuraodoPostgreSQL.

Extreme Learning - PostgreSQL 9.x DBA - 3



Vamoseditaropostgresql.confedefinirmososseguintesparmetrosabaixo:

max_wal_senders=2
wal_level=hot_standby
archive_mode=on
archive_command='cp%p/mnt/postgresql_backups/wal/%f'

vim /var/lib/pgsql/9.6/data/postgresql.conf

Extreme Learning - PostgreSQL 9.x DBA - 4


Faltaaindafazermosoutroajuste,emoutroarquivodeconfigurao,pg_hba.conf.

local replication postgres trust


Extreme Learning - PostgreSQL 9.x DBA - 5
vim /var/lib/pgsql/9.6/data/pg_hba.conf

Comentrio: Voc pode estar se questionando porque o parmetro wal_level foi


configurado para hot_standby (lembre que ns usamos esse parmetro para
configurar a replicao). Outro possvel valor para o wal_level archive. O motivo
por configurarmos como hot_standby podermos realizar queries no database,
caso seja necessrio, durante o processo de recovery, assim poderemos fazer
algumas verificaes de consistncias, antes de liberarmos novamente o ambiente
paraosusurios.

Depois de alterados todos os parmetros nos dois arquivos, postgresql.conf e


pg_hba.conf, precisamos reiniciar o PostgreSQL para que os novos valores
comecem a ser utilizados (tem que reiniciar o servio do PostgreSQL mesmo, no
adiantasomentefazeroreloaddosarquivos).

systemctl restart postgresql-9.6

Aps reiniciar, semprebomverificarqueoserviodoPostgreSQLestexecutando


semproblemas.

systemctl status postgresql-9.6

Extreme Learning - PostgreSQL 9.x DBA - 6


Para executar o backup, vamos executar o pg_baseckup. Como o nosso objetivo


demonstrar o procedimento de backup e restore, no iremos fazer o agendamento
do pg_basebackup. No seu ambiente de produo, voc certamente ir desejar
realizaresseagendamento,utilizandoacrondoLinux.

No esquea que para executar o pg_basebackup, voc deve utilizar o usurio


postgres.

su - postgres

pg_basebackup --xlog --format=t -D


/mnt/postgresql_backups/base_backup/`date +%Y%m%d`

--xlogindicaqueseroincludosnoarquivodebackup,osarquivosde
transactionlog(WAL)
--format=tindicaqueoformatodoarquivodebackupgeradoserum
arquivodotipotar
`date+%Y%m%d`-vaicriarumapastacomadatadodia,noformatoAno
MsDia

Extreme Learning - PostgreSQL 9.x DBA - 7


Lembrando sempre que a pasta pg_xlog a pasta onde o PostgreSQL grava os


arquivosdetransactionlogs(WAL)queestosendogeradospeloservidor.

Quando executada uma operao de backup, o PostgreSQL sinaliza isso com a


criaodeumarquivonapastapg_xlog:

Extreme Learning - PostgreSQL 9.x DBA - 8


Vamosolharapastadedestinodobackup:

Extreme Learning - PostgreSQL 9.x DBA - 9


VamosolhartambmapastadedestinodosarquivosWAL

Issofinalizaoprocedimentodebackup.

OperaesentreoBackupeoRestore

Para demonstrar o procedimento de restore, inclusive usando o Point in Time


Recovery (PITR) ns iremos realizar algumas operaes que iro gerar mais
transaction logs (WAL) e com isso conseguiremos restaurar exatamente at um
determinadomomento.

Vamos criar 3 tabelas diferentes e vamos observar os momentos em que elas so


criadas. Essa informao ser utilizada posteriormente quando quisermos fazer o
restoreatummomentoespecfico.

Alm disso tambm iremos apagar uma tabela e iremos restaurar at o momento
anterioraodropdatabela.

Extreme Learning - PostgreSQL 9.x DBA - 10


Pastapg_xlog(apsobackupeapsacriaodas2primeirastabelastabelas)

Extreme Learning - PostgreSQL 9.x DBA - 11


PastadebackupdoarquivosWAL(/mnt/postgresql_backups/wal)

Criaodaterceiratabela:

Extreme Learning - PostgreSQL 9.x DBA - 12


Ocomandoqueapagaatabelatestepitr2:

ProcedimentodeRestore

Para executarmos o procedimento de restore, vamos simular uma situao de


desastre,ouseja,oseuPostgreSQLcorrompeueabortouoservio:

Extreme Learning - PostgreSQL 9.x DBA - 13


AcabamosdemataroprocessodoPostgreSQLparasimularodesastre.

Observao muito importante: iremos restaurar o servidor inteiro, e estamos


partindo do pressuposto que o servidor o mesmo, isto , j tem os binrios do
PostgreSQL instalados e a mesma verso. Porm, ns iremos mover osarquivos
"corrompidos" para uma pasta temporria, porque como no sabemos ao certo o
que ocorreu ou o momento em que ocorreu,equalostatusdobackup,elespodero
serteisnofuturo.

Extreme Learning - PostgreSQL 9.x DBA - 14


Vamosdescompactarobackupento:

Extreme Learning - PostgreSQL 9.x DBA - 15


Depoisdedescompactado:

Seolharmosocontedodapastadata,vemosquetodososarquivosvoltaram:

Extreme Learning - PostgreSQL 9.x DBA - 16


Se olharmos a pasta pg_xlog, teremos uma ideia de qual momento conseguimos


restauraronossoservidor:

Extreme Learning - PostgreSQL 9.x DBA - 17


Se formos inicializar o servio do PostgreSQL, poderemos atrapalhar o processo de
restoreatomomentodesejado,portantonofaremosisso.

Observao: No ambiente de produo, voc pode desejar que os usurios no


acessem o servidor enquanto voc estiver realizando o processo de restore. Para
isso, voc deve alterar o arquivo pg_hba.conf e retirar a permisso de acesso de
outros endereos de rede, porexemplo,epermitirsomenteaexecuolocalhost,via
console.

Para restaurarmos o banco de dados, necessrio criarmos um arquivo chamado


recovery.conf e colocarmosnapastaondeestoosdemaisarquivosdoPostgreSQL
(nonossoexemplo/var/lib/pgsql/9.6/data)

Essearquivooproprietriodeledeverserousuriopostgres.

Para minimizar a quantidade de comandos, vamos executar, a partir daqui, tudo


comousuriopostgres.

su - postgres

vim /var/lib/pgsql/9.6/data/recovery.conf

restore_command = 'cp /mnt/postgresql_backups/wal/%f %p'

Extreme Learning - PostgreSQL 9.x DBA - 18


Depois de o arquivo configurado, o momento de iniciarmos o servio ento do


PostgreSQL

Extreme Learning - PostgreSQL 9.x DBA - 19



pg_ctl -D /var/lib/pgsql/9.6/data start

Se voc tiver essa mensagem de erro abaixo, porque est faltando mudar as
permissesnapastaquevocdescompactou:

chmod 0700 /var/lib/pgsql/9.6/data -R -f


chown postgres:postgres /var/lib/pgsql/9.6/data -R -f

Extreme Learning - PostgreSQL 9.x DBA - 20


Agorainiciamosnovamenteoservio:

Extreme Learning - PostgreSQL 9.x DBA - 21


E vamos acompanhar o que o PostgreSQL est fazendo, para isso, vamos olhar o
arquivo de log do PostgreSQL (no nosso exemplo, est na pasta
/var/lib/pgsql/9.6/data/pg_log/)

tail -f /var/lib/pgsql/9.6/data/pg_log/postgresql-Mon.log

Extreme Learning - PostgreSQL 9.x DBA - 22


Observe a indicao do horrio do ltimo transaction log que ele conseguiu


restaurar.

Quando o processo de recovery termina, ele renomeia o arquivo recovery.confpara


recovery.done

Seformosolharastabelasquecriamos,estfaltandoumadelas:
Extreme Learning - PostgreSQL 9.x DBA - 23

Atabelatestepitr3noaparecenodatabase.

Bom, temos o nosso servidor funcional, porm ainda no no momento em que


precisamos,precisamosvoltarexatamentenomomentoemquehouveodesastre.

Para isso, temos que parar o servio do PostgreSQL, e retomar o processo de


restoredesdeoincio(descompactaroarquivodobackup_base).

Lembre-se de apagar todo o contedo do diretrio onde est a instncia (no nosso
exemploem/var/lib/pgsql/9.6/data)

Agoradescompactenovamenteoarquivodebackup:

Extreme Learning - PostgreSQL 9.x DBA - 24


Descompactaoconcluda:

Extreme Learning - PostgreSQL 9.x DBA - 25


Vamos comparar agora a pasta onde fazemos os backups dos arquivos de
transactionlogs(WAL)queapasta/mnt/postgresql_backups/wal

Seolharmosapastapg_xlogquefoirestauradadobackup:

Extreme Learning - PostgreSQL 9.x DBA - 26


Com a pasta que guardamos (lembra que recomendamos guardar a pasta


anterior?),queestem/tmp/postgresql_data

Extreme Learning - PostgreSQL 9.x DBA - 27



Vemosquetemosdiferenasnoshorrios:

Os WALs do backup so at (que esto no arquivo base) vo at o horrio


12:01
Os WALs que so armazenados no NAS (/mnt/postgresql_backups/wal) vo
atohorrio14:18
Os WALs que estavam na pasta pg_xlog no momento do desastre vo ato
horrio12:27

Aqui para que possamos fazer o restore at o momento do desastre, temosqueter


a certeza de que, pelo menos os arquivos de transaction log, esto ntegros, e que
mantivemoselesguardados.

Vamos copiar todos os arquivos da pasta temporria


/tmp/postgresql_data/pg_xlog para a pasta restaurada
/var/lib/pgsql/9.6/data/pg_xlog

cp /tmp/postgresql_data/pg_xlog/0* /var/lib/pgsql/9.6/data/pg_xlog

Se voc executou a cpia como root, no esquea de mudar o owner dos arquivos
paraousuriopostgres.

Vamosmontarnovamenteoarquivorecovery.conf

vim /var/lib/pgsql/9.6/data/recovery.conf

Extreme Learning - PostgreSQL 9.x DBA - 28


SalvamosoarquivoevamosiniciarnovamenteoserviodoPostgreSQL

pg_ctl -D /var/lib/pgsql/9.6/data start

Extreme Learning - PostgreSQL 9.x DBA - 29


Seacompanharmosoprocessoderecovery,noarquivodelog:

Extreme Learning - PostgreSQL 9.x DBA - 30


Observe que agora, a ltima transao recuperada foi atohorrio12:30,quefoio
momentododesastre.

Seformosolharastabelas,vamosverqueelasestol:

Mas espera, no eram 3 tabelas? Sim,pormumpoucoantesdeocorrerodesastre,


algum usurio apagou uma das tabelas por engano (recorde o comando DROP no
inciodaseo).

Conseguimos restaurar o PostgreSQL exatamente atomomentoemqueocorreuo


desastre. Mas e se quisermos restaurar at o momento anterior ao comandoDROP
databela?

Eu preciso saber exatamente o horrio emqueocorreuisso,parafazerorestoreat


oaquelemomento.

Vamosreverentooshorrios:

Extreme Learning - PostgreSQL 9.x DBA - 31


O comando DROP ocorreu s 12:30, portanto se conseguirmos restaurar o banco


at o horrio de 12:29, teremos o resultado desejado (atabelaquefoiexcluda,no

Extreme Learning - PostgreSQL 9.x DBA - 32


ser excluda) e teremos, eventualmente, perda de transaes que foram feitas
entreohorrio12:29:30atofinal(momentododesastre)12:30:29

Para fazermos esse restore, temos que iniciar todo o processo novamente, desde o
comeodedescompactarosarquivosapartirdobackupbase.

Lembre-se, voc dever excluir todos os arquivos e descompactar a partir do


backupbase.

Extreme Learning - PostgreSQL 9.x DBA - 33


Apsterminardedescompactar,vamoscopiartodososarquivosdapasta
temporria/tmp/postgresql_data/pg_xlogparaapastarestaurada
/var/lib/pgsql/9.6/data/pg_xlog

cp /tmp/postgresql_data/pg_xlog/0* /var/lib/pgsql/9.6/data/pg_xlog

Se voc executou a cpia como root, no esquea de mudar o owner dos arquivos
paraousuriopostgres.

Vamos montar novamente o arquivorecovery.conf,squeagoransvamosindicar


paraoPostgreSQLatqualohorrioquequeremosqueelefaaorecovery.

vim /var/lib/pgsql/9.6/data/recovery.conf

restore_command = 'cp /mnt/postgresql_backups/wal/%f %p'


recovery_target_time = '2017-06-12 12:29:30'

Extreme Learning - PostgreSQL 9.x DBA - 34


Acompanhandoologenquantoorecoveryexecutado:

Extreme Learning - PostgreSQL 9.x DBA - 35


Verificamos que ele fez o recovery at o ltimo commit do horrio que
estabelecemosquedeveriarecuperar.

Seformosolharnossastabelas,apsorestore:

Temosnossas3tabelas.

Extreme Learning - PostgreSQL 9.x DBA - 36

Das könnte Ihnen auch gefallen