Nếu bị bạn sử dụng backup google drive trên aapanel mà bị tình trạng backup thiếu web hay database thì có thể sử dụng rclone để backup tự động theo hướng dẫn sau
Bước 1: Chuẩn bị
- Tạo folder chứa file backup trên google drive và lấy id thư mục (ID_THU_MUC)
- Lấy Client ID và Client secret theo hướng dẫn: https://rclone.org/drive/#making-your-own-client-id
Bước 2: Thực hiện
Đăng nhập ssh vps
1. Cài đặt rclone
curl https://rclone.org/install.sh | sudo bash
2. Cấu hình rclone
rclone config
Chọn “n” tạo mới
name => nhập gdrive
Nhập số của Google Drive, thường là: 22
Nhập Client ID và Client secret t
scope => 1
service_account_file => để trống Enter
Edit advanced config? => n
Use web browser to automatically authenticate rclone with remote? => n
Mở cmd chạy lệnh
rclone authorize "drive" "doan_ma_ngau_nhien"
Trình duyệt web mở lên thì cứ chấp nhận quyền cho email drive là được
Quay lại copy config_token trên CMD rồi dán vào SSH
Configure this as a Shared Drive (Team Drive)? => n
Keep this “gdrive” remote? => y
Nhập q => Enter để thoát
3. Cấu hình folder lưu backup cho rclone, tránh ghi, xóa file, folder khác
nano /root/.config/rclone/rclone.conf
Thêm vào cuối
root_folder_id = ID_THU_MUC
Ctrl + O => Enter => Ctrl + X để lưu và thoát
4. Tạo thông tin root mysql
nano /root/.my.cnf
Nhập nội dung
[client] user=root password=ROOT_MYSQL_PASS host=localhost
Ctrl + O => Enter => Ctrl + X để lưu và thoát
Phân quyền lại file
chmod 600 /root/.my.cnf
Kiểm tra xem lấy được danh sách database chưa
mysql -e "SHOW DATABASES;"
5. Tạo script tự động backup website, database và xóa backup cũ
nano /root/backup.sh
Nhập nội dung
#!/bin/bash
############################################
# CONFIG
############################################
KEEP_NUM=${1:-7} # số bản backup giữ, mặc định 7
WWWROOT="/www/wwwroot"
TMP="/tmp/aapanel_backup"
DATE=$(date +"%Y-%m-%d_%H-%M")
RCLONE_REMOTE="gdrive:"
LOG="/var/log/backup.log"
LOCKFILE="/tmp/backup.lock"
# PATH chuẩn cho cron
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
############################################
# LOCK FILE - tránh chồng lệnh
############################################
if [ -f "$LOCKFILE" ]; then
echo "$DATE: Backup đang chạy, thoát..." | tee -a "$LOG"
exit 1
fi
touch "$LOCKFILE"
trap "rm -f $LOCKFILE" EXIT
mkdir -p "$TMP"
echo "===== BACKUP START $DATE (KEEP_NUM=$KEEP_NUM) =====" | tee -a "$LOG"
############################################
# BACKUP WEBSITE FILES
############################################
for SITE_PATH in "$WWWROOT"/*; do
[ ! -d "$SITE_PATH" ] && continue
SITE=$(basename "$SITE_PATH")
echo "---- BACKUP SITE FILES: $SITE ----" | tee -a "$LOG"
tar --warning=no-file-changed -czf "$TMP/${SITE}_web_$DATE.tar.gz" \
--exclude="wp-content/cache" \
--exclude="wp-content/litespeed" \
--exclude="wp-content/uploads/cache" \
-C "$WWWROOT" "$SITE"
# Upload vào Drive
rclone copy "$TMP/${SITE}_web_$DATE.tar.gz" "$RCLONE_REMOTE/web/$SITE/" >> $LOG 2>&1
rm -f "$TMP/${SITE}_web_$DATE.tar.gz"
# Giữ số bản mới nhất
FILES_TO_DELETE=$(rclone lsf --files-only "$RCLONE_REMOTE/web/$SITE/" | sort | head -n -$KEEP_NUM)
for FILE in $FILES_TO_DELETE; do
rclone delete "$RCLONE_REMOTE/web/$SITE/$FILE" >> $LOG 2>&1
done
done
############################################
# BACKUP DATABASES
############################################
DBS=$(mysql -N -e "SHOW DATABASES;" | grep -Ev "information_schema|mysql|performance_schema|sys")
for DB in $DBS; do
echo "---- BACKUP DB: $DB ----" | tee -a "$LOG"
mysqldump "$DB" | gzip > "$TMP/${DB}_db_$DATE.sql.gz"
rclone copy "$TMP/${DB}_db_$DATE.sql.gz" "$RCLONE_REMOTE/databases/$DB/" >> $LOG 2>&1
rm -f "$TMP/${DB}_db_$DATE.sql.gz"
# Giữ số bản mới nhất
FILES_TO_DELETE=$(rclone lsf --files-only "$RCLONE_REMOTE/databases/$DB/" | sort | head -n -$KEEP_NUM)
for FILE in $FILES_TO_DELETE; do
rclone delete "$RCLONE_REMOTE/databases/$DB/$FILE" >> $LOG 2>&1
done
done
rm -rf "$TMP"
echo "===== BACKUP END =====" | tee -a "$LOG"
Cấp quyền file
chmod +x /root/backup.sh
6. Tạo cron tự backup hằng ngày
- Thay số 7 bằng số bản backup muốn giữ
- Thay số 1 bằng số giờ muốn bắt đầu chạy
crontab -e
Nhập vào cuối
0 1 * * * /root/backup.sh 7 >> /var/log/backup.log 2>&1
Chạy thử ngay bằng lệnh
/root/backup.sh
