Em 30 de novembro de 2010 19:58, Fernando Avena
<[email protected]>escreveu:
> Em 30-11-2010 17:06, André Ormenese escreveu:
>
> Fernando,
> pelo que entendi vc esta fazendo o backup físico com o banco em
> funcionamento.....
>
> /etc/init.d/postgresql stop
> ou
>
> pg_ctl stop -m smart
> http://pgdocptbr.sourceforge.net/pg80/app-pg-ctl.html
>
> ai fazer o
>
> tar -cjf backup-fisico-postgresql-$DATA.tar.bz2 /usr/local/pgsql/data
>
> feito...voltar
>
> /etc/init.d/postgresql start
>
> só que mesmo assim não jeito correto de fazer? ou os dados que teria não
> seria util pra usar depois em caso de problema?
>
> sem contar que banco vai ter que para. tudo bem que posso ficar com ele
> parado por um tempo.
>
Este é o backup frio ele tem a vantagem de não precisar de nenhuma cópia do
WAL (a gente chama isso de arquivamento do WAL ou archive), mas precisa
tirar o banco do ar.
>
> restore_command (string)
> recovery_target_time (timestamp) | recovery_target_timeline (string) |
> recovery_target_xid (string) e outras
> http://pgdocptbr.sourceforge.net/pg80/backup-online.html
>
>
>
> http://listas.postgresql.org.br/pipermail/pgbr-geral/2009-September/017143.html
> já aqui foi postando um script de como fazer a coisa.
>
>
> pelo que entendi....tu configura no postgresql.conf
>
> *archive_command = 'cp -i %p /home/usuario/dir_copias/%f </dev/null'*
>
> ai ele vai guardar o wal - ai tudo sendo gravado.
>
> *select pg_start_backup('Backup_ok');*
>
> ..podemos da um tar no data
>
> * tar -cjf backup-fisico-postgresql-$DATA.tar.bz2 /usr/local/pgsql/data*
>
> feito isso..
>
> *select pg_stop_backup();*
>
> ai vai ter wal.backup que regista isso e depois vai sendo criados mais
> wal...e tenho que pegar eles ai constantemente?
>
> Correto. Mas você tem que guardar todos os archives a partir do ponto
imediatamente antes do backup começar. Veja que isso fica marcado nos logs.
pois é com eles que volto no ponto de recuperação que quero.
>
> Exatamente, esse é o tal do PITR (Point In Time Recovery).
> e pode voltar a fazer isso novamente depois de tempo então? qual
> periodicidade é legal ter? deve varias pra cada banco.....mas pra quem não
> tão paranoico...1 vez na semana?
>
> Isso depende da sua paranóia e do seu bolso. Em regra geral:
* os backups lógicos (pg_dump) são realizados com menor frequencia, mas são
guardados por longos períodos (para auditoria).
* os backups físicos são guardados por um curto espaço de tempo (uma
semana). Se você só guarda o do dia anterior e uma fita falhar, então você
está muito encrencado, certo? Então é melhor guardar no mínimo o dos 3
últimos dias. Se você acha que pode precisar voltar no tempo mais do que
isso, vai precisar de muitas fitas, o que pode ficar caro. Se você puder
guardar o último backup físico em disco também, não é má idéia.
* o archives devem ser guardados em disco e em fita pelo mesmo período de
tempo que o backup físico. A diferença é que você pode querer copiar os
archives para outro servidor de hora em hora ou até menos que isso. Um rsync
é uma boa pedida, ou colocar um script no 'archive_command' que já faça
isso. Claro que você vai ter de montar um script para ir apagando os
archives com mais de N dias. Use o find para isso. Sem os archives você não
faz PITR pense sempre no tipo de desastre que pode ocorrer.
* Se vai guardar o último backup físico e os archives no disco local (além
da cópia para fita), faça isso num disco/RAID separado dos discos/RAIDs onde
os dados estão armazenados. Com isso você tem uma garantia adicional, pois
os discos que trabalham mais são os discos onde o pg_xlog (o WAL) e os dados
estão guardados. Se eles falharem, a chance de o mesmo ocorrer nos discos
onde estão o backup físico e os archives são bem menores.
* Faça cópia também dos seus scripts, do pg_hba.conf e postgresql.conf e
outros arquivos de configuração relevantes do servidor.
Como se vê, não é tão simples como parece. Veja um script que eu montei (não
é para PostgreSQL, é para Oracle, mas algumas coisas são bem parecidas:
http://www.midstorm.org/~telles/2008/08/20/shell-scrip-para-backup-manual-no-oracle-no-linux/
Se montar um script que fique bacana, manda para nós depois. Tô vendo muito
script ruim por aqui.
Para não dizer que não falei das flores, mando em anexo uma rotina de backup
para Windows, que fiz de má vontade numa madrugada destas (espero que nenhum
avião caia por causa do script tosco). Sim eu sei que poderia melhorar. Em
Linux eu tenho um script bem melhor, mas não posso divulgar, sorry.
[]s
Fábio Telles
--
blog: http://www.midstorm.org/~telles/
e-mail / jabber: [email protected]
@echo off
for /f "tokens=2-4 delims=/ " %%i in ('date/t') do (
(set Dia=%%i)
(set Mes=%%j)
(set Ano=%%k)
)
REM variáveis de configuração
set bin="C:\..."
set database="nome_base_prod"
set logdir="C:\..."
set logarq=%logdir%\log_backup_%Ano%_%Mes%_%Dia%.txt
set dirbkparc="C:\...\archive"
set dirbkp="C:\...\backup"
set dirlog="C:\...\data\pg_log"
set dirdata1="C:\...\data"
set dirdata2="C:\...\tablespace"
set dias=8
echo -- >> %logarq%
echo -- Inicio >> %logarq%
echo -- >> %logarq%
echo. >> %logarq%
cd %bin%
vacuumdb.exe -U postgres %database% >> %logarq%
psql.exe -U postgres %database% -c "REINDEX DATABASE WORKFLOW" >> %logarq%
psql.exe -U postgres %database% -c "SELECT pg_start_backup('workflow')" >>
%logarq%
xcopy "%dirdata1%\base\*.*" "%dirbkp%\base" /E /V /Y /i >> %logarq%
xcopy "%dirdata1%\global\*.*" "%dirbkp%\global" /E /V /Y /i >> %logarq%
xcopy "%dirdata1%\*.*" "%dirbkp%\tablespace" /E /V /Y /i >> %logarq%
psql.exe -U postgres %database% -c "SELECT pg_stop_backup()" >> %logarq%
pg_dump.exe --compress=9 -c -U postgres %database% >
%dirbkp%\dump\%database%.dmp
pg_dumpall.exe -s -U postgres > %dirbkp%\dump\schema.sql
REM Para funcionar precisa do programa forfiles
forfiles -p%dirbkparc% -m* -d-%dias% -c"CMD /C echo Arquivo @FILE Removido" >>
%logarq%
forfiles -p%dirbkparc% -m* -d-%dias% -c"CMD /C del /f @FILE" >> %logarq%
forfiles -p%dirlog% -m*log -d-30 -c"CMD /C echo Arquivo @FILE Removido" >>
%logarq%
forfiles -p%dirlog% -m*.log -d-30 -c"CMD /C del /f @FILE" >> %logarq%
echo -- >> %logarq%
echo -- Fim >> %logarq%
echo -- >> %logarq%
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral