domingo, 3 de abril de 2011

[Linux]Tarea programada para hacer backup de base de datos en Postgres

creamos un archivo llamado backup.sh


#!/bin/sh
#dar pemisos de ejecucion a este archivo chmod +x backup.sh
#para ejecutar ./backup2.sh
#crontab  todos los dias a las 11:30 como root
#30  23 * * *  /path/crontab/backup.sh 


#Meter aqui la contraseña de postgresql
#export PGUSER=NOMBRE_USUARIO
export PGPASSWORD=CLAVE_BASE_DATOS

DATE=`date +%Y%b%d-%H%M%S`; ANO=`date +%Y`; MES=`date +%b`
MYSQL=0; PGSQL=1

DB_ARRAY=(BD1 B2)
TY_ARRAY=($PGSQL $PGSQL)

DB_SERV=(  "mysqldump  -t -u mysqluser --password=password"
           "pg_dump --username=dddcomc_publico -F p -O -D -v -f"
        )
DB_NAME=("MYSQL SERVER" "POSTGRESQL")
BACKUP=/path/Backups/base_datos
OWNER=user.gruop



if ! [ -d $BACKUP ]; then
 echo -e "?33[0;37mCreando t ?33[0;31m$BACKUP "
 mkdir $BACKUP
 chown $OWNER -R $BACKUP/
fi

i=0
while [ $i -lt ${#DB_ARRAY[@]} ]; do
 dbname=${DB_ARRAY[$i]}
 if ! [ -d $BACKUP/$ANO ]; then
    echo -e  "?33[0;37mCreando t ?33[0;31m $BACKUP/$ANO"
    mkdir $BACKUP/$ANO
    mkdir $BACKUP/$ANO/$MES
    mkdir $BACKUP/$ANO/$MES/$dbname
    chown $OWNER -R $BACKUP/$ANO/$MES/$dbname

 elif ! [ -d $BACKUP/$ANO/$MES ]; then
    echo -e "?33[0;37mCreando t ?33[0;31m $BACKUP/$ANO/$MES"
    mkdir $BACKUP/$ANO/$MES
    mkdir $BACKUP/$ANO/$MES/$dbname
    chown $OWNER -R $BACKUP/$ANO/$MES/$dbname

 elif ! [ -d $BACKUP/$ANO/$MES/$dbname ]; then
    echo -e "?33[0;37mCreando t ?33[0;31m $dbname"
    mkdir $BACKUP/$ANO/$MES/$dbname
    chown $OWNER -R $BACKUP/$ANO/$MES/$dbname
 fi
 idx=${TY_ARRAY[$i]}
 echo -e  ${DB_SERV[$idx]} $dbname | gzip > $BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.sql.gz
 #${DB_SERV[$idx]} $dbname | gzip > $BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.sql.gz
 #echo -e "?33[0;37m${DB_NAME[$idx]}:t $dbname ttt [?33[0;32m OK ?33[0;37m]"

 #crea el sql
 pg_dump -i -h localhost -p 5432 -U $PGUSER -F p -O -D -f  "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.sql" $dbname
 cat "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.sql" | gzip > "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.sql.gz"

 #dump
  pg_dump --host localhost --username $PGUSER --format custom --blobs  --oids --verbose --file "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.backup" $dbname
 cat "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.backup" | gzip > "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.backup.gz"


 rm "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.sql"
 rm "$BACKUP/$ANO/$MES/$dbname/$dbname-$DATE.backup"
 echo -e "?33[0;37m${DB_NAME[$idx]}:t $dbname ttt [?33[0;32m OK ?33[0;37m]"


 i=$(($i+1))
done
Con esta instruccion hacemos que se ejecute todos los dias a las 11:30 pm

30  23 * * *  /path/crontab/backup.sh

No hay comentarios:

Publicar un comentario