Skip to content

Instantly share code, notes, and snippets.

@ThienTranDuy
Created January 18, 2021 03:34
Show Gist options
  • Save ThienTranDuy/89ac72b82a4e56a73c5101783a82d408 to your computer and use it in GitHub Desktop.
Save ThienTranDuy/89ac72b82a4e56a73c5101783a82d408 to your computer and use it in GitHub Desktop.
RCLONE - backup sync to cloud via shell script (backup resouce, database (mysql, mongodb), config vhost)
# Author: mariohandsome.github.io
#!/bin/bash
SERVER_NAME="SERVER_NAME" # folder name in cloud
BLACK_LIST=( "source_in_git" "source_in_git_02" ) # folder not upload
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL="/usr/bin/mysql"
MYSQL_USERNAME="MYSQL_USERNAME"
MYSQL_PASSWORD="MYSQL_PASSWORD"
MYSQLDUMP=/usr/bin/mysqldump
MONGO="/usr/bin/mongo"
MONGODUMP="/usr/bin/mongodump"
MONGO_HOST="MONGO_HOST" # 127.0.0.1 or your IP
MONGO_PORT="MONGO_PORT" # default 27017,...
MONGO_USERNAME="MONGO_USERNAME"
MONGO_PASSWORD="MONGO_PASSWORD"
SECONDS=0
mkdir -p "$BACKUP_DIR"
mkdir -p "$BACKUP_DIR/mysql"
mkdir -p "$BACKUP_DIR/mongo"
mkdir -p "$BACKUP_DIR/sources"
mkdir -p "$BACKUP_DIR/configs"
echo "Starting Backup Mongod";
mongo_databases=`$MONGODUMP --host=$MONGO_HOST --port=$MONGO_PORT --username=$MONGO_USERNAME --password=$MONGO_PASSWORD --gzip --out=$BACKUP_DIR/"mongo"`
echo "Finished";
echo '';
echo "Starting Backup Database";
mysql_databases=`$MYSQL --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
for mysql_db in $mysql_databases; do
$MYSQLDUMP --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} --force --opt $mysql_db | gzip > "$BACKUP_DIR/database/$mysql_db.gz"
done
echo "Finished";
echo '';
echo "Starting Backup Website Sources";
for D in /var/www/html/*; do
if [ -d "${D}" ]; then
domain=${D##*/}
if [[ ! ${BLACK_LIST[*]} =~ $domain ]]; then
echo "- "$domain;
zip -r $BACKUP_DIR/sources/$domain.zip /var/www/html/$domain/public_html/ -q -x /var/www/html/$domain/public_html/wp-content/cache/**\* #Exclude cache
fi
fi
done
echo "Finished";
echo '';
echo "Starting Backup Appache Configuration";
cp /etc/httpd/conf.d/vhost.conf $BACKUP_DIR/configs
echo "Finished";
echo '';
size=$(du -sh $BACKUP_DIR | awk '{ print $1}')
echo "Starting Uploading Backup";
/usr/sbin/rclone move $BACKUP_DIR "thientran:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1 ## thientran is rclone config name
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2w delete "thientran:$SERVER_NAME" #Remove all backups older than 2 week
/usr/sbin/rclone -q --min-age 2w rmdirs "thientran:$SERVER_NAME" #Remove all empty folders older than 2 week
/usr/sbin/rclone cleanup "thientran:" #Cleanup Trash
echo "Finished";
echo '';
duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
@ThienTranDuy
Copy link
Author

ThienTranDuy commented Jan 18, 2021

set crontab at 00:00 every day auto backup

crontab -e
i
0 0 */1 * * /root/backup.sh
:wq

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment