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.
- Inicializamos los ficheros y directorios.
- Hacemos un dump a la base de datos.
- Comprimimos el contenido
- Securizamos los archivos obtenidos.
- Eliminamos los archivos temporales y viejos.
- 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 BKDIR
y 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?.