Skip to content

Instantly share code, notes, and snippets.

@tdtgit
Last active July 30, 2021 00:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tdtgit/f4fb1844b17efd294de81950c4ddf43e to your computer and use it in GitHub Desktop.
Save tdtgit/f4fb1844b17efd294de81950c4ddf43e to your computer and use it in GitHub Desktop.
Rclone Backup Script
#!/bin/bash
#v=1.0
SERVER_NAME=
TIMESTAMP=$(date +"%F-%H-%M")
SECONDS=0
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL=/usr/bin/mysql
MYSQL_USER=root
MYSQL_PASSWORD=
MYSQLDUMP=/usr/bin/mysqldump
################# MySQL Backup #################
mkdir -p "$BACKUP_DIR/mysql"
echo "Starting Backup Database";
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
/usr/sbin/rclone move $BACKUP_DIR "Driveremote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
rm -rf $BACKUP_DIR/*
echo "Finished Backup Database";
echo '-------------------------------------';
################# Website Backup #################
echo "Starting Backup Website";
for D in /var/www/*; do
if [ -d "${D}" ]; then
domain=${D##*/}
echo "-- Starting backup "$domain;
zip -r $BACKUP_DIR/$domain.zip /var/www/$domain/htdocs/* -q -x /var/www/$domain/htdocs/wp-content/cache/**\*
/usr/sbin/rclone move $BACKUP_DIR "Driveremote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
rm -rf $BACKUP_DIR/*
echo "-- Backup done "$domain;
fi
done
echo "Finished Backup Website";
echo '-------------------------------------';
################# Nginx Configuration Backup #################
echo "Starting Backup Nginx Configuration";
cp -r /etc/nginx/ $BACKUP_DIR/nginx/
/usr/sbin/rclone move $BACKUP_DIR "Driveremote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
echo "Finished Backup Nginx Configuration";
echo '-------------------------------------';
#/usr/sbin/rclone -q --min-age 6m delete "Driveremote:$SERVER_NAME" #Remove all backups older than 2 week
#/usr/sbin/rclone -q --min-age 6m rmdirs "Driveremote:$SERVER_NAME" #Remove all empty folders older than 2 week
rm -rf /root/backup/*
duration=$SECONDS
echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
@tdtgit
Copy link
Author

tdtgit commented Aug 15, 2017

Giới thiệu

Script backup bằng Rclone sửa mới từ code của bác Luân canhme.com

Một số cải tiến:

  • Upload database ngay sau khi nén xong, vì data lúc nào cũng quan trọng hơn :P
  • Nén xong mã nguồn trang nào, upload ngay và xóa ngay sau khi backup. Có ý nghĩa lớn khi dùng cho VPS còn ít dung lượng trống.
  • Backup kèm các config của Nginx

Lưu ý

Script hiện tại chỉ hoạt động với EasyEngine có website nằm ở đường dẫn /var/www

Hướng dẫn cài đặt

  1. Cài đặt Rclone theo hướng dẫn tại: https://hocvps.com/rclone/
  2. Chạy lệnh wget -qO rclone_backup.sh https://duonganhtuan.com/rclone && chmod +x rclone_backup.sh
  3. Chỉnh sửa SERVER_NAME thành đường dẫn upload lên remote, chỉnh sửa MYSQL_PASSWORD thành mật khẩu của tài khoản root MySQL, chỉnh sửa Driveremote thành tên remote đã tạo trong Rclone.
  4. Setup crontab để chạy tự động hoặc gõ ./rclone_backup.sh để chạy trực tiếp.

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