Bueno para empezar con mi primer post, pondré un script mediante el cual hago respaldos de todas las bases de datos de MySQL y las empaqueto en un tar.gz para después enviarlas por FTP a otro servidor y así tener siempre un respaldos de estas bases, y poder actuar ante alguna contingencia, de esta forma estaremos preparados para cualquier caída inesperada de nuestro servidor productivo, todo esto lo realizo mediante un cron que se ejecuta todos los días por la madrugada y me envía por correo todos los sucesos, espero le sirva a alguien.
#!/bin/bash
# Ruta en la que se guarda el log de la operacion de backup.
logfile=PATH/mysql.log
backup_dir=PATH/database
# Creamos un nuevo log del proceso de backup
rm -rf $logfile
touch $logfile
# Mediante esta instruccion, generamos un nombre de fichero con el dia y la hora del proceso de backup.
timeslot=`date +%Y%m%d_%H%M`
cd $backup_dir
# Iteramos a traves de la lista de bases de datos a la que el usuario tiene acceso.
echo “Empieza proceso de Resapaldo a $timeslot horas” >> $logfile
# Se borra los respaldos anteriores porque ya debieron ser tomados por produccion
echo “–>Se borran los respaldos existentes porque ya debieron ser tomados por produccion” >> $logfile
if rm *.tar.bz2; then
echo “–>Se borraron exitosamente los respaldos anteriores” >> $logfile
else
echo “–>Ocurrio un error al borrar los respaldos anteriore” >> $logfile
fi
for BBDD in $( mysql -uUSER -pPASSWD -Bse ‘show databases’); do
# Volcamos la base de datos en un fichero temporal
mysqldump -uUSER -pPASSWD $BBDD | gzip > $backup_dir/$BBDD’_'$timeslot.sql.gz
# El nombre del fichero resultante contiene el nombre de la base de datos y la fecha de la copia.
# De esta manera, cuando sea necesaria su restauracion sera mas sencillo de localizar.
echo “–> Backup completo en la base de datos: $BBDD ($BBDD’_'$timeslot.sql.gz)” >> $logfile
# Borramos el fichero temporal
done
#SE EMPAQUETA EN UN SOLO ARCHIVO TODAS LAS BASE DE DATOS
echo “–> Agrupando las base de datos” >> $logfile
if tar -c *.gz | bzip2 > db_$timeslot.tar.bz2; then
echo “–> Bases de datos agrupadas exitosamente” >> $logfile
else
echo “–> Error al agrupar las base de datos” >> $logfile
fi
if rm -f *.gz; then
echo “–> Se eliminaron exitosamente las bases independientes” >> $logfile
else
echo “–> Ocurrio un problema al eliminar las base de datos independientes” >> $logfile
fi
echo “Conectando y autentificando con el servidor de FTP” >> $logfile
HOST=IP
USER=USERFTP
PASSWD=PASSWDFTP
cd $backup_dir
echo “Enviando back-up de la BD” >> $logfile
ftp -n $HOST << END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
put db_$timeslot.tar.bz2
quit
END_SCRIPT
echo “Archivo enviado correctamente” >> $logfile
echo “Eliminamos el archivo local” >> $logfile
echo “Archivo eliminado correctamente” >> $logfile
timeslotEnd=`date +%Y%m%d_%H%M`
echo “Termina proceso de Resapaldo a $timeslotEnd horas” >> $logfile
cat $logfile | mail -s “LogRespaldo” TUMAIL