¡Base de datos eliminada! – Tienes un respaldo, ¿verdad?

Definitivamente esto nos ha pasado alguna ocasión en la vida. Una de las tareas de un sysadmin en mantener una copia de seguridad reciente de toda la información sensible en un servidor, ya sea VPS o dedicado hay que recordar que siempre hay riesgos de errores en hardware o software y nadie está exento a fallas críticas.

El siguiente script te ayudará a respaldar de forma periódica todas las bases de datos en tu servidor dedicado o VPS, ordenándolas por día y mes, así tendrás un historial bastante completo de tu información.
#!/bin/bash

#Estableciendo la fecha del respaldo y el directorio raiz
currentdate=`date +%F`
db_directory=”/home/backups/dbs/”
contact_email=”user@yourdomain.com”

#Eliminamos archivos temporales utilizados en el respaldo anterior.

rm -fv /home/backups/dbs/failed-dbs.txt
rm -fv /home/backups/dbs/failed-dbs-report.txt

# Obtenemos el mes actual

month=`date +%m`

case $month in

01) db_directory=”/home/backups/dbs/Ene/”;;
02) db_directory=”/home/backups/dbs/Feb/”;;
03) db_directory=”/home/backups/dbs/Mar/”;;
04) db_directory=”/home/backups/dbs/Abr/”;;
05) db_directory=”/home/backups/dbs/May/”;;
06) db_directory=”/home/backups/dbs/Jun/”;;
07) db_directory=”/home/backups/dbs/Jul/”;;
08) db_directory=”/home/backups/dbs/Ago/”;;
09) db_directory=”/home/backups/dbs/Sep/”;;
10) db_directory=”/home/backups/dbs/Oct/”;;
11) db_directory=”/home/backups/dbs/Nov/”;;
12) db_directory=”/home/backups/dbs/Dic/”;;
*)

echo “Imposible determinar la fecha del sistema”;

esac

echo $db_directory;

if [ -d $db_directory ];
then
echo “El directorio de destino ha sido encontrado, empezando el respaldo de BD MySQL ahora …\n”;
sleep 1;
echo “Creando subfolder para el almacenamiento de las bases de datos\n”;
mkdir -p $db_directory/$currentdate;
sleep 1;

else
echo “Creando directorio de destino para el respaldo de BD MySQL …”;
sleep 2;
mkdir $db_directory;
mkdir -p $db_directory/$currentdate;
fi

mysql -e “show databases”|egrep -vw “(Database|information_schema|performance_schema)” > /home/backups/dbs/listdatabases
for x in `cat /home/backups/dbs/listdatabases`;
do
#Inicia el respaldo de cada base de datos en el servidor
echo “Iniciando respaldo de base de datos para $x …”;
/usr/bin/mysqldump $x > $db_directory/$currentdate/$x.sql;
sleep 1;
if [ $? -eq 0 ];
then
echo “¡Respaldo de $x completado! \n”
else
echo “Algo salio mal, creando reporte para el SysAdmin …”;
echo $x >> /home/backups/dbs/failed-dbs.txt;
fi
done

if [ -f /home/backups/dbs/failed-dbs.txt ];
then
echo -e “Hola SysAdmin, durante el proceso de respaldo algunas bases de datos no pudieron respaldarse correctamente.\n” > /home/backups/dbs/failed-dbs-report.txt;
echo -e “A continuacion, la lista de bases de datos que no fueron respaldas en el servidor:\n” >> /home/backups/dbs/failed-dbs-report.txt;

for i in `cat /home/backups/dbs/failed-dbs.txt`
do
echo $i >> /home/backups/dbs/failed-dbs-report.txt
done

cat /home/backups/dbs/failed-dbs-report.txt | mail -s “DB Backup Summary” $contact_email

else

echo -e “———– Resumen del proceso de respaldo de MySQL ———– \n” > /home/backups/dbs/dbs-report.txt;
echo -e “Hola SysAdmin, el respaldo de las bases de datos en el servidor ha sido ejecutado con éxito. No hay errores reportados.\n” >> /home/backups/dbs/dbs-report.txt;
echo -e “—————————————————————–” >> /home/backups/dbs/dbs-report.txt;
cat /home/backups/dbs/dbs-report.txt | mail -s “DB Backup Report” $contact_email

fi

Finalmente, para programar este script únicamente es necesario crear una tarea programada.

[root@s2 ~]# crontab -e

30 3 * * * sh /root/support/db.sh

Con este CronJob el script se ejecutará todos los días a las 3:00 A.M.

¡Ya está! Ahora podrás mantener tu información respaldada.

Profile Picture for ServerHostMX Staff
ServerHostMexico is a mexican webhosting provider created on 2014 as a small projects developer team offering internet services for pymes. Nowadays, we are working hard for having an efficent and standard webhosting level for all our clients, in Mexico and over the globe.

Leave a Reply

Your email address will not be published. Required fields are marked *


CAPTCHA Image
Reload Image