Hace unas semana me enviaron a realizar un Script que automatice el proceso de realización de Backup de la base de Datos PostgreSQL de nuestro servidor de producción el cual pueda a su vez pueda irse poco a poco perfeccionado hasta que pueda ser utilizado en los servidores.
Así que me pareció interesante poder compartirlo con ustedes ya que tiene 2 semanas funcionado y anda bien, bueno aquí les va.
Revisando el requerimiento
el Backup se realiza diario a las 2:00 am y utilizara al usuario de la Base de datos neotrons para realizar el Backup de la base de datos pruebas y luego de realizar el Backup debe de enviar un mensaje al administrador que el backup fue realizado satisfactoriamente en tal fecha.
Al parecer no suena muy complejo y como a todos a primera vista se nos ocurre hacerlo con pg_dump, este comando en forma general extrae una base de datos PostgreSQL a un fichero de script.
Todo marchaba bien en mi escenario de pruebas, hasta que uno de mis primeros inconvenientes fue que al realizar el Script de pruebasel usuario neotrons no tenía una contraseña definida por lo cual el backup se realizaba satisfactoriamente sin pedir la contraseña, pero al momento que asígnanos una contraseña al usuario nos pedía que ingresemos la contraseña de forma manual y al hacer un pg_dump –help no existia una opcion para asignarle la contraseña tal y como el “-U nombre” para asignar el usuario, por lo tanto las ideas venían a mi y como siempre esto se soluciona sitiando la variable, pero que variable es la que asigana el password en PostgreSQL, asi que googleando encontré que la variable es “PGPASSWORD”  entonces en que consitira el seteo de la variable pues nada mas que asignar a la variable  PGPASSWORD en valor que queramos y eso lo hacemos de la siguiente forma:
export PGPASSWORD='123456'  #Le asignamos el password
unset PGPASSWORD                    #Liberamos la variable  
Otra de las cosas interesantes de este script es  que debe enviar un mensaje al administrador, esto si es algo mas tocado porque lo hago casi siempre en los script que realizo, para esto uso sendmail lo cual hace mas facil la linea de codigo.
echo "El backup diario de la Base de Datos de $NOMBRE se ha completado satisfactoriamente el $FIN" | mail -s "Backup pg_dump diario " admin@peruoverflow.com
sobre este codigo el nuevo reto es que en el mensaje Envié el log es decir los datos q se generen al realizar el comando pg_dump, eso ya es para la próxima entrada del blog  así que no insistas jaja no lo he realizado aun =),
Aquí les va el Script completo para los que les interese  
#!/bin/bash 
## Backup diario de la Base de Datos  PostgreSQL
# www.peruoverflow.blogspot.com – By Neotros
# www.peruoverflow.blogspot.com – By Neotros
#########################################
#Declaración de variables 
HOST='ws28' 
NOMBRE=`hostname` 
DIA=`date +%A` 
HORA=`date +%H` 
FIN=`date "+%d/%m/%Y a las %l:%M:%S"` 
#Especificamos la ruta del pg_dump puede variar según la distribución  
BACKUP='/usr/bin/pg_dump' 
#realizar el Backup a las 2 am 
if [ "$HORA" = "02" ]; 
then 
#seteo de las variables user y password 
export PGUSER='neotrons' 
export PGPASSWORD='123456' 
#realizacion de Backup  con pg_dump mas detalle pg_dump --help
$BACKUP -h localhost -p 5432 -F plain -v -f "/backup_$HOST/backup_sql_diario/curaseo_$DIA.sql" curaseo >> pruebasalida.txt 
#Envio de mensaje de confirmacion 
echo "El backup diario de la Base de Datos de $NOMBRE se ha completado satisfactoriamente el $FIN" | mail -s "Backup pg_dump diario " admin@peruoverflow.com
#Liberar las variables seteadas 
unset PGUSER 
unset PGPASSWORD 
fi
#FIN DE BACKUP
Espero que les sirva y que si encuentran algún modo de optimizarlos lo compartan asi podamos hacer un scrip robusto para backup, ya pronto les daré novedades sobre como capturar el log del comando.
Tabien le puede interesar:
Mi primer Script de Backup en centOS
Creación de usuarios enjaulados con VSFTPD
Explotando un SQL injection tipo Inbound
Mi primer Script de Backup en centOS
Creación de usuarios enjaulados con VSFTPD
Explotando un SQL injection tipo Inbound
Fuentes:
 

 
suena excelente lo probare, una pregunta manejando una base de datos de algunos 2 o 3 gb suena algo sencillo, pero cuando hablamos de una base de datos de mas de 50 gb es donde vendría el problema, mas cuando el servidor esta en producción, ¿Cuantos gb de información manejaste con tu script?
ResponderEliminar