Skip to content

Instantly share code, notes, and snippets.

@fede1608
Last active January 10, 2017 16:51
Show Gist options
  • Save fede1608/4d1d72e557a961d213db420d712fa29c to your computer and use it in GitHub Desktop.
Save fede1608/4d1d72e557a961d213db420d712fa29c to your computer and use it in GitHub Desktop.
Mega Backup Script
#!/bin/bash
#http://www.matteomattei.com/backup-your-server-on-mega-co-nz-using-megatools/
#https://juncotic.com/megafuse-realizando-backups-mega-linux/
#Crontab entry
#0 4 * * 0,2,4,6 /root/.scripts/megaBackupScript.sh 2>&1|tee -a /root/.scripts/megaBackupScript.log
SERVER=""
BACKUPS_LIMIT=7
WORKING_DIR="/root/backup"
BACKUP_MYSQL="true"
MYSQL_USER=""
MYSQL_PASSWORD=""
SERVERS_FOLDER="/root/Servers"
# Binario de MegaFuse a ejecutar:
MEGA_BIN=/root/MegaFuse
MEGA_CONF=/root/.megafuse.conf
# Punto de montaje Mega y cache path (deben coincidir con los del archivos de conf .megafuse.conf
MOUNTPOINT="/tmp/mega"
CACHEPATH="/tmp/megacache"
##################################
# Create local working directory and collect all data
echo `date` 'Creating local working directory and collect all data...'
rm -rf ${WORKING_DIR}
mkdir ${WORKING_DIR}
cd ${WORKING_DIR}
## Eliminamos dirs de cache y mountpoint, y los re-creamos
rm -rf $MOUNTPOINT/
rm -rf $CACHEPATH/
mkdir $MOUNTPOINT
mkdir $CACHEPATH
# Backup MySQL
echo `date` 'MySQL backup starting...'
if [ "${BACKUP_MYSQL}" = "true" ]
then
mkdir ${WORKING_DIR}/mysql
for db in $(mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e 'show databases;' | grep -Ev "^(Database|mysql|information_schema|performance_schema|phpmyadmin)$")
do
echo `date` "Processing ${db}..."
mysqldump --opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} "${db}" | gzip > ${WORKING_DIR}/mysql/${db}_$(date +%F_%T).sql.gz
done
echo `date` "MySQL Backup finished"
#mysqldump --opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} --events --ignore-table=mysql.event --all-databases | gzip > ${WORKING_DIR}/mysql/ALL_DATABASES_$(date +%F_%T).sql.gz
fi
# Backup servers
echo `date` 'Servers backup starting...'
mkdir ${WORKING_DIR}/servers
for folder in $(find ${SERVERS_FOLDER} -mindepth 1 -maxdepth 1 -type d)
do
echo `date` "Processing ${folder}..."
cd $(dirname ${folder})
tar cJf ${WORKING_DIR}/servers/$(basename ${folder}).tar.xz $(basename ${folder})
cd - > /dev/null
done
echo `date` "All servers complete"
##################################
echo `date` "Mounting Mega directory..."
sudo kill -9 $(ps fax|grep .megafuse.conf|grep -v grep |awk -F' ' '{print $1}')
sudo umount $MOUNTPOINT
$MEGA_BIN -c $MEGA_CONF &> /dev/null &
## Esperamos a que se monte para seguir
echo `date` "Waiting for MegaFuse..."
while [ $(mount|grep megafuse|wc -l) -ne 1 ]; do
sleep 1
done
## si no está creado el dir del backup del server en Mega, lo creamos
[ ! -d $MOUNTPOINT/backup_${SERVER} ] && mkdir $MOUNTPOINT/backup_${SERVER}
# Remove old logs
echo `date` 'Removing old backups...'
while [ $(ls ${MOUNTPOINT}/backup_${SERVER}/ | grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" | wc -l) -gt ${BACKUPS_LIMIT} ]
do
TO_REMOVE=$(ls ${MOUNTPOINT}/backup_${SERVER}/ | grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" | sort | head -n 1)
rm -rf ${MOUNTPOINT}/backup_${SERVER}/${TO_REMOVE}
done
# Create remote folder
curday="$(date +%F)"
# Backup now!!!
echo `date` "Moving files to Mega dir..."
mv ${WORKING_DIR} $MOUNTPOINT/backup_${SERVER}/${curday}
echo `date` "Synchronizing..."
sync; sync; sync
# Clean local environment (just to make sure)
echo `date` 'Finishing...'
sleep 600
sudo umount $MOUNTPOINT
sudo rm -rf ${WORKING_DIR}
sudo kill -9 $(ps fax|grep .megafuse.conf|grep -v grep |awk -F' ' '{print $1}')
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment