Last active
January 10, 2017 16:51
-
-
Save fede1608/4d1d72e557a961d213db420d712fa29c to your computer and use it in GitHub Desktop.
Mega Backup Script
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 | |
#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