Last active
October 29, 2022 21:09
-
-
Save michelep/c9c028d62b754b1311edbc0b87638998 to your computer and use it in GitHub Desktop.
Server backup to MEGA free space
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 | |
# | |
# backup mysql dbs, /etc folder and all subfolders inside /var/www. Encrypt it using aes256 and upload to MEGA.nz /backup folder | |
# 1) have a mega.nz account for 50GB of space | |
# 2) install MEGAcmd (https://mega.nz/cmd) | |
# 3) change CONFIGURATION lines to fit your needs and copy to /etc/cron.daily ;-) | |
# CONFIGURATION | |
SERVER="[name of the server]" | |
DAYS_TO_BACKUP=3 | |
WORKING_DIR="/root/backup_tmp_dir" | |
PASSWORD="[password]" | |
MEGA_LOGIN="[mega e-mail]" | |
MEGA_PASSWORD="[mega password]" | |
BACKUP_MYSQL="true" | |
MYSQL_USER="[mysql username]" | |
MYSQL_PASSWORD="[mysql password]" | |
DOMAINS_FOLDER="/var/www" | |
################################## | |
# Login to MEGA | |
if [[ ! `mega-session` =~ "session is" ]] | |
then | |
echo "Logging in to MEGA..." | |
mega-login ${MEGA_LOGIN} ${MEGA_PASSWORD} &> /dev/null | |
else | |
echo "Already logged in" | |
fi | |
# Remove old backups | |
echo "Remove old backups..." | |
for FN in `mega-ls /backups/backup_${SERVER}` ; do | |
if [[ ${FN} =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] | |
then | |
echo ${FN} | |
if [ $((($(date +%s) - $(date -d ${FN} +%s)) / 86400)) -gt ${DAYS_TO_BACKUP} ] | |
then | |
echo "removing old backup ${FN}" | |
mega-rm -r -f /backups/backup_${SERVER}/${FN} | |
fi | |
fi | |
done | |
echo "Start backup..." | |
# Create local working directory and collect all data | |
rm -rf ${WORKING_DIR} | |
mkdir ${WORKING_DIR} | |
cd ${WORKING_DIR} | |
# Backup /etc folder | |
cd / | |
tar czf - etc | openssl enc -e -aes256 -out ${WORKING_DIR}/etc.tar.gz.enc -k ${PASSWORD} | |
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 | openssl enc -e -aes256 -out ${WORKING_DIR}/mysql/${db}_$(date +%F_%T).sql.gz.enc -k ${PASSWORD} | |
done | |
#echo "all db now" | |
mysqldump --opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} --events --ignore-table=mysql.event --all-databases | gzip | openssl enc -e -aes256 -out ${WORKING_DIR}/mysql/ALL_DATABASES_$(date +%F_%T).sql.gz.enc -k ${PASSWORD} | |
fi | |
# Backup domains | |
mkdir ${WORKING_DIR}/domains | |
for folder in $(find ${DOMAINS_FOLDER} -mindepth 1 -maxdepth 1 -type d) | |
do | |
cd $(dirname ${folder}) | |
tar --exclude='*.log' -czf - $(basename ${folder}) | openssl enc -e -aes256 -out ${WORKING_DIR}/domains/$(basename ${folder}).tar.gz.enc -k ${PASSWORD} | |
cd - > /dev/null | |
done | |
# Create remote folder | |
curday=$(date +%F) | |
mega-mkdir -p /backups/backup_${SERVER}/${curday} 2> /dev/null | |
# Backup now!!! | |
mega-put ${WORKING_DIR}/* /backups/backup_${SERVER}/${curday} > /dev/null | |
# Clean local environment | |
rm -rf ${WORKING_DIR} | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment