Criando um arquivo bat para rotina de backup em banco postgre

Uma das maiores preocupações dos desenvolvedores de software é com relação à segurança, seja ela de arquivos, de dados, contra invasões etc. Previnir ações maliciosas de terceiros e fenômenos da natureza é importante para mantermos nosso “produto” sempre bem seguro.

Focando na segurança dos dados, o post de hoje tem como objetivo abordar uma prática de segurança em banco de dados postgre. Trata-se de um arquivo bat para sistemas operacionais Windows que executa um backup de um determinado banco  de tempos em tempos predefinidos.

Imagine que exista um grande sistema de gestão instalada em uma máquina e que diariamente é inserido centenas de informações na base de dados desse sistema. É coerente que todos os dias ao final do expediente entremos no SGBD e executemos um backup para gerar uma cópia se segurança e garantir assim a recuperação das informações caso aconteça algo com o banco de dados de produção (ataque, queima dos recursos de hardware, roubo, etc.).

Dependendo do tamanho da base de dados, esse processo de geração de backups pode ser um tanto demorado. Então nada melhor a se fazer do que automatizá-lo.

No exemplo a seguir eu vou criar um arquivo de texto com extensão (.bat). Esse arquivo será o responsável por acessar a base de dados e executar o backup.

set PGUSER=postgres
set PGPASSWORD=123456
 
for /f "tokens=1,2,3,4 delims=/ " %%a in ('DATE /T') do set Date=%%b-%%c-%%d
 
C:Arquiv~1Postgr~18.2binpg_dump.exe -i -h localhost -p 5432 -U postgres -F c -b -o -v -f "Backups/MeuBanco%Date%.backup" MeuBanco

Como nosso arquivo acessará o postgre precisamos passar para ele um usuário/senha válidos para o banco de dados no qual será realizado o processo. Depois criei um laço de repetição apenas para ele gerar um nome aleatoriamente e não sobrepor backups anteriores. Então eu abro o executável pg_dump.exe que fica dentro da pasta de instalação do SGBD (o caminho pode variar de acordo com as definições de sua instalação) e “rodo” o backup a partir dele e definindo o host(localhost), a porta(5432), o usuario(postgres), o local onde será salvo a cópia de segurança(Backups/MeuBanco%Date%.backup) e o nome do banco de dados a ser copiado(MeuBanco).

Pronto, agora podemos salvar o arquivo. Para testá-lo é só clicar duas vezes e se abrirá uma tela do MS-DOS onde todos os códigos aparecerão. Ao final será gerado um arquivo com extensão (.backup) dentro da pasta Backups.

Certo. Agora como fazer para automatizar a execução desse arquivo que criamos. É só ir nas Tarefas Agendadas do Windows e adicionar o arquivo(.bat) e definir a periodicidade na qual ele deverá ser executado(diariamente, semanalmente, mensalmente, etc.) e o horário de início(se for um banco de dados de produção o ideal é que seja feito em períodos ociosos, geralmente à noite ou de madrugada).

E pronto! Para melhorar essa prática é bom que a cópia seja gravada em um local remoto, de preferência geograficamente distante.

Abs.

Siga-me no twitter: @rafaelwendel

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Após criar o arquivo apresentava erro na senha de autenticação do usuário postgres, então alterei ficando da seguinte forma:

    @echo off
    cd \
    cd C:\Program Files\PostgreSQL\9.0\bin
    set PGUSER=postgres
    set PGHOST=localhost
    set PGPASSWORD=postgres

    for /f “tokens=1,2,3,4 delims=/ ” %%a in (‘DATE /T’) do set Date=%%b-%%c-%%d

    cd C:\Program Files

    cd PostgreSQL\9.2\bin\

    pg_dump.exe -i -h localhost -p 5432 -U postgres -F c -b -o -v -f “C:/backup/frentecaixa_db%Date%.backup” frentecaixa_db
    pause

  2. Eniuton Guerra Filho, eu não consigo de jeito nenhum cara, quando eu executo ele já fecha em seguida.

    @echo off
    cd \
    cd C:\Program Files\PostgreSQL\9.3\bin
    set PGUSER=postgres
    set PGHOST=localhost
    set PGPASSWORD=postgres

    for /f “tokens=1,2,3,4 delims=/ ” %%a in (‘DATE /T’) do set Date=%%b-%%c-%%d

    cd C:\Program Files

    cd PostgreSQL\9.3\bin\

    pg_dump.exe -i -h localhost -p 4645 -U postgres -F c -b -o -v -f “C:/backup/frentecaixa_db%Date%.backup” frentecaixa_db
    pause

  3. preciso de uma ajuda.
    fiz esse bat. mais gostaria de salvar de hora em hora em vez de dia.
    @echo off
    set PGUSER=postgres
    set PGPASSWORD=123

    for /f “tokens=1-4 delims=/ ” %%i in (“%date%”) do (
    set dow=%%i
    set day=%%j
    set month=%%k
    set year=%%l
    )
    set datestr=%year%_%month%_%day%_%dow%
    echo datestr is %datestr%

    set BACKUP_FILE=D:\aaaaaaaaaaaaaaa\banco%datestr%.backup
    echo backup file name is %BACKUP_FILE%

    “C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe” -i -h localhost -p 5432 -U postgres -F c -b -v -f %BACKUP_FILE% banco
    @echo on

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *