Skip to content

Instantly share code, notes, and snippets.

@matteomattei
Last active September 2, 2016 06:22
Show Gist options
  • Save matteomattei/6deb97e386d0557c1788 to your computer and use it in GitHub Desktop.
Save matteomattei/6deb97e386d0557c1788 to your computer and use it in GitHub Desktop.
Mega server backup using megafuse
#!/bin/bash
SERVER="web1"
DAYS_TO_BACKUP=7
WORKING_DIR="/root/backup_tmp_dir"
BACKUP_MYSQL="true"
MYSQL_USER="root"
MYSQL_PASSWORD="your_db_root_password"
DOMAINS_FOLDER="/var/www"
##################################
# Create local working directory and collect all data
rm -rf ${WORKING_DIR}
mkdir ${WORKING_DIR}
cd ${WORKING_DIR}
# Backup /etc folder
cd /
tar cJf ${WORKING_DIR}/etc.tar.gx etc
cd - > /dev/null
# Backup MySQL
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 "processing ${db}"
mysqldump --opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} "${db}" | gzip > ${WORKING_DIR}/mysql/${db}_$(date +%F_%T).sql.gz
done
#echo "all db now"
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 domains
mkdir ${WORKING_DIR}/domains
for folder in $(find ${DOMAINS_FOLDER} -mindepth 1 -maxdepth 1 -type d)
do
cd $(dirname ${folder})
tar cJf ${WORKING_DIR}/domains/$(basename ${folder}).tar.xz $(basename ${folder})
cd - > /dev/null
done
##################################
/root/MegaFuse -c /root/.megafuse.conf &> /dev/null &
while true
do
[ ! -z "$(ls /mnt/)" ] && break
sleep 1
done
# Now we are sure /mnt is mounted
[ ! -d /mnt/backup_${SERVER} ] && mkdir -p /mnt/backup_${SERVER}
# Remove old logs
while [ $(ls /mnt/backup_${SERVER}/ | grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" | wc -l) -gt ${DAYS_TO_BACKUP} ]
do
TO_REMOVE=$(ls /mnt/backup_${SERVER}/ | grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" | sort | head -n 1)
rm -rf /mnt/backup_${SERVER}/${TO_REMOVE}
done
# Create remote folder
curday="$(date +%F)"
# Backup now!!!
mv ${WORKING_DIR} /mnt/backup_${SERVER}/${curday}
sync; sync; sync
# Clean local environment (just to make sure)
rm -rf ${WORKING_DIR}
umount /mnt
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment