Last active
August 29, 2015 14:05
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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