Respalda tus bases de datos mediante Crontab (Reloaded)

Hace ya algún tiempo en este blog publique una técnica bastante sencilla para realizar un respaldo de una base de datos postgres mediante un script y la ejecución del sistema de tareas programadas Crontab; en ultimas fechas, necesite de algún modo adecuar mis scripts para respaldar distintas bases de datos en diferentes servidores, por lo que recurri al script que antes se menciona y claramente pude darme cuenta de que era un tanto engorroso (en cuanto a su configuración) pero siempre fue funcional, así me di a la tarea de modificarlo para que fuese mas fácil configurarlo e implementarlo por cualquiera de mis camaradas con quienes en determinado momento llegue a compartir este método.

Aquí el resultado de el script nuevo que básicamente cuenta con las mismas funcionalidades, pero este esta configurado de una forma distinta para que se pueda adecuar rápidamente otros parametros y tambien encontramos la explicación correspondiente:

#!/bin/sh
#*************************************************#
#      Configuracion                              #
#-------------------------------------------------#
#  Define Bases de datos y su carpeta Destino     #
#-------------------------------------------------#
# Significado de Variables:
#  * $hostd  ------->    Indica el usuario y el objeto destino de nuestro archivo .tar.bz2
#  * $db1  --------->    Nombre de la DB a respaldar
#  * $db1out ------->    Nombre que se le asignara a el archivo de Salida, incluye la variable $date
#                        desglosada por dia_mes_anio
#  * $folderdb1 ---->    Carpeta Destino de nuestra DB comprimida
#  * $transferdb1 -->    Variable programada para el envio de nuestra DB
#-------------------------------------------------#
#---- User & Host Destino DBs ----#
hostd="cable34@192.168.1.50"      # Esta linea puede omitirse si no es necesario enviar el archivo
#                                   hacia otro host
#---------------------------------#
#//--- DB1 -------------#
db1="inventario_db"
db1out="inventario_db_"$(date +%d_%m_%Y)"" #
folderdb1="/none/base/inventario/"$(date +%B_%Y)"/"
transferdb1="$db1out.tar.bz2 $hostd:$folderdb1"    # Esta linea puede ser comentada si no se
#                                                    requiere enviar nuestro archivo a otro host
#//--- DB2 -------------#
db2="personal"
db2out="personal_"$(date +%d_%m_%Y)""
folderdb2="/none/base/Personañ/"$(date +%B_%Y)"/"
transferdb2="$db2out.tar.bz2 $hostd:$folderdb2" # Esta linea puede ser comentada si no se
#                                                 requiere enviar nuestro archivo a otro host
#//--- Variable para eliminar *.sql y *.tar.bz2 ---#
drop_all_sql_bz2="$db1out.* $db2out.*"
#-----------------------------#
#  //Acciones & Rutinas DB's  #
#-----------------------------#
# //       DB1     \\ #
cd $HOME              # Establecemos el directorio de root como el lugar donde se llevaran a cabo todas las acciones del script
pg_dump -d $db1 > $db1out.sql
tar -c $db1out.sql | bzip2 > $db1out.tar.bz2   # Aqui establecemos que la Db se empacara en un tar.bz2
ssh $hostd mkdir $folderdb1         # En este caso pueden omitirse las 2 primeras sentencias (ssh y $hostd)
#                                     si no enviaremos el archivo a otro host
scp $transferdb1    # Esta linea puede ser comentada si no se
#                     requiere enviar nuestro archivo a otro host
# //       DB2     \\ #
pg_dump -d $db2 > $db2out.sql
tar -c $db2out.sql | bzip2 > $db2out.tar.bz2
ssh $hostd mkdir $folderdb2
scp $transferdb2    # Esta linea puede ser comentada si no se
#                     requiere enviar nuestro archivo a otro host
# \\ Limpiar Archivos .sql & .tar.bz2 \\
rm -rf $drop_all_sql_bz2 # Finalmente con esta linea indicamos que deben de borrarse los archivos generados en nuestra capeta local
# Cable34 2007-2009
# https://cable34.wordpress.com

Lo siguiente es probar el script y verificar que nuestras instrucciones se cumplan sin problemas.

Después creo que no hay pierde ya que esta rutina se ejecute automáticamente en tiempos que nosotros determinaremos, con la finalidad de que no sea requerida intervención alguna de nuestra parte, para ello editaremos el crontab con el comando:

crontab -e

Por default el comando nos abrira el crontab en un editor de texto plano (es el vi);para insertar una nueva linea presionamos la tecla “insert” y añadiremos nuestra rutina siguiendo una sintaxis como la mostrada a continuación

* * * * * /ubicacion_del_script/respaldadb.sh

Los asteriscos representan según el orden lo siguiente :

 1er  * = Minutos  (0-60)
 2do * = Horas  (0-23)
 3er  * = Mes/Día (1-31)
 4to  * = Mes (1-12)
 5to  * = Dias/Semana(0-7)

#guias, #how-to, #servidores