Created
January 18, 2021 03:34
-
-
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)
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
# 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." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
set crontab at 00:00 every day auto backup