Script de backup en Linux

0
7703

Configuramos un script para realizar un backup de nuestras bases de datos y archivos de Linux para posteriormente subirlo a Amazon AWS.

Para comenzar vamos a explicar la estructura del script, la mayoría de los scripts se basan en lo mismo, por internet pordrás encontrar infinidad de ellos y confeccionados de distintas maneras aunque su síntesi es la misma.

  1. Inicializamos los ficheros y directorios.
  2. Hacemos un dump a la base de datos.
  3. Comprimimos el contenido
  4. Securizamos los archivos obtenidos.
  5. Eliminamos los archivos temporales y viejos.
  6. Enviamos el backup a un servidor remoto.

Lo primero que yo recomiendo es utilizar un usuario específico para realizar esta tarea. De este modo nos será más fácil identificar lo relacionado con este procedimiento tan importante y necesario. No obstante en esta entrada el script lo vamos a lanzar desde /etc/cron.daily/ por lo que pondremos las variables para todos los usuarios y no utilizaremos el cron de un usuario específico.

Ejecutamos el siguiente comando

root@debian:~$ nano /etc/.profile

Al final del archivo añadimos las siguientes lineas, estas variables van a apuntar a nuestras rutas para cargar las contraseñas de mysql en el script, la ubicación dónde se guardará el backup y el directorio el cual queremos realizar el backup.

# set variables for backup
export SPSWD=/directory/password/
export BKPATH=/directory/backup/
export BKDIR=/directory/to/backup/

Una vez creadas las variables reiniciamos la máquina. Después nos dirigiremos al directorio home por ejemplo y crearemos el archivo «script».

root@debian:~$ touch /home/admin/script

root@debian:~$ nano /home/admin/script

Ahora lo rellenaremos con el siguiente script shell:

#!/bin/bash
# Creating directories and initializing files.

filename="daily_backup""$(date +'%Y_%m_%d')".tar.gz
logfile="$BKPATH/"backup_log_"$(date +'%Y_%m')".log
dumpdatabase="$BKPATH"/dumpdatabase.gz
touch "$BKPATH"/"$filename"

# Dumping databases.

echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --defaults-extra-file=$SPSWD/mysqldump.cnf --default-character-set=utf8 --all-databases | gzip > "$dumpdatabase"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

# Compress web contents and dump.

pushd $BKDIR > /dev/null
tar -zcPf "$BKPATH"/"$filename" * "$dumpdatabase"
popd > /dev/null
echo "dumping source code finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

# Changing permission

chown root -R "$BKPATH"
chown root "$logfile"

echo "file permission changed" >> "$logfile"

# removing old files and temporary files

find "$BKPATH" -name "daily_backup*" -mtime +2 -exec rm {} \;
rm "$dumpdatabase"
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

# pushing amazon S3

aws s3 cp "$BKPATH"/"$filename" s3://nuestro_bucket/"$filename"
echo "pushing backup to AMAZON AWS $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

Una vez tenemos el script le damos los permisos de ejecución:

chmod +x script

Este script lo que nos hará será un dump de todas las bases de datos de mysql. Nos comprimirá nuestro directorio de archivos web definido en la variable de entorno BKDIRy luego lo enviará a un bucket remoto de Amazon AWS.

Si todavía no tienes configurado la potente herramienta de Amazon AWS aquí encontrarás una pequeña guía para hacerlo.

Y tú ya tienes tus datos a salvo?.

 

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí