Skip to content

Instantly share code, notes, and snippets.

@Chofoteddy
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Chofoteddy/479e253ff6d4af28f9cd to your computer and use it in GitHub Desktop.
Save Chofoteddy/479e253ff6d4af28f9cd to your computer and use it in GitHub Desktop.
Backup DB (MySQL), files and project folders. Place this file in the root of your project and give it execute permissions, then run it with the parameters you require.
#!/bin/bash
# By: @Chofoteddy
# Date: 21/Ago/2014
# Update: 27/Ago/2014
#
# ./backup.sh -u USER -p 'PASSWORD' -d NAMEDB
filelog='glog.log'
function datetime {
echo `date +%d/%m/%Y-%H:%M:%S`
}
if [[ $# -eq 0 ]]; then
echo $(datetime) '# No se especifico ningún argumento' >> $filelog
exit 1
else
while getopts ":u:p:d:" opt; do
case $opt in
u)
# -u lanzado $OPTARG
m_us=$OPTARG
;;
p)
# -p lanzado $OPTARG
m_ps=$OPTARG
;;
d)
# -d lanzado $OPTARG
m_db=$OPTARG
;;
\?)
echo $(datetime) '# Opción inválida: '$OPTARG >> $filelog
exit 1
;;
:)
echo $(datetime) '# La opción: '$OPTARG' requiere un argumento.' >> $filelog
exit 1
;;
esac
done
if [[ ! -d data/ ]]; then
mkdir data
echo $(datetime) '<> Creación de carpeta data' >> $filelog
fi
# Crea el backup de la DB con formato fecha(yyymmdd)-nombredb.sql
`mysqldump -u $m_us -p$m_ps $m_db --routines > ./data/$( date +'%Y%m%d' )-$m_db.sql` || exit 1
echo $(datetime) '<> Creación de DB en data/' >> $filelog
if [[ -d .git/ ]]; then
list_ignore='bak/\nbackup\.sh\nglog\.log'
if [[ ! -a .gitignore ]]; then
echo -e $list_ignore > .gitignore
echo $(datetime) '<> Creación del archivo .gitignore y reglas' >> $filelog
else
f_backup=`cat .gitignore | grep '(backup\.sh|bak\/|glog\.log)'`
if [[ -z $f_backup ]]; then
echo -e $list_ignore >> .gitignore
echo $(datetime) '> Añadidas reglas a .gitignore ' >> $filelog
fi
fi
files=`git status -s`
# Verificamos si hay archivos por confirmar
if [[ -z $files ]]; then
echo $(datetime) '# No hay nada por confirmar' >> $filelog
else
echo $(datetime) '# Archivos por confirmar' >> $filelog
`git status -s >> $filelog`
fi
else
echo $(datetime) '# No se encontró carpeta .git/' >> $filelog
fi
# Valido la existencia del directorio bak/
if [[ ! -d bak/ ]]; then
`mkdir bak`
echo $(datetime) '<> Creación de carpeta bak' >> $filelog
fi
echo $(datetime) '>> Creación de backup' >> $filelog
`tar --exclude='.git' --exclude='bak' --exclude='*.tar.bz2' --exclude='cache/' --exclude=$filelog -cjf bak/$( date +'%Y%m%d' ).tar.bz2 . >> $filelog`
echo $(datetime) '<< Terminó el backup' >> $filelog
# Validamos la cantidad de backups, si hay mas de 2 se eliminan
num_baks=`ls bak/ | wc -l`
if [[ $num_baks -gt 2 ]]; then
eliminados=0
for file in `ls bak/`; do
rm bak/$file
let eliminados++
echo '- Se eliminó bakup '$file >> $filelog
if [[ $eliminados -ge $num_baks-2 ]]; then
break
fi
done
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment