Quay lại danh sách
Tin tức công nghệ

Hướng dẫn Thiết lập Backup Tự động VPS lên Google Drive, Dropbox với Script Bash Đơn giản

17 tháng 5, 2026

Giới thiệu: Tầm Quan trọng của Backup Tự động cho VPS

Trong thế giới số hiện đại, dữ liệu là tài sản quý giá nhất của mọi doanh nghiệp. Một VPS (Virtual Private Server) có thể chứa đựng cơ sở dữ liệu khách hàng, mã nguồn ứng dụng, cấu hình hệ thống và vô số thông tin quan trọng khác. Sự cố phần cứng, lỗi phần mềm, tấn công mạng hay thậm chí là lỗi của con người đều có thể dẫn đến mất mát dữ liệu nghiêm trọng, gây thiệt hại lớn về tài chính và uy tín.

Backup thủ công không chỉ tốn thời gian mà còn dễ bị bỏ quên. Giải pháp tối ưu là thiết lập một hệ thống backup tự động, định kỳ sao lưu dữ liệu và lưu trữ ở một vị trí an toàn, tách biệt khỏi server chính. Lưu trữ đám mây như Google Drive và Dropbox là lựa chọn lý tưởng nhờ tính sẵn sàng cao, khả năng mở rộng và bảo mật.

Bài viết này sẽ hướng dẫn bạn từng bước xây dựng một hệ thống backup tự động cho VPS sử dụng script Bash, tích hợp với các dịch vụ lưu trữ đám mây phổ biến, giúp bạn yên tâm vận hành hệ thống.

Chuẩn bị Môi trường và Công cụ Cần thiết

Trước khi bắt đầu, bạn cần đảm bảo VPS của mình có các công cụ sau đây. Hầu hết các bản phân phối Linux phổ biến (Ubuntu, Debian, CentOS) đều có sẵn hoặc dễ dàng cài đặt qua package manager.

  • Bash Shell: Môi trường thực thi script mặc định trên Linux.
  • Công cụ nén: tar hoặc zip để đóng gói dữ liệu.
  • Rclone: Công cụ dòng lệnh mạnh mẽ để đồng bộ và quản lý file với hơn 70 dịch vụ lưu trữ đám mây, bao gồm Google Drive và Dropbox. Đây là trái tim của giải pháp backup này.
  • Cron: Trình lập lịch công việc trên Linux để chạy script tự động theo chu kỳ.

Bạn có thể cài đặt Rclone bằng lệnh đơn giản:

curl https://rclone.org/install.sh | sudo bash

Sau khi cài đặt, bạn cần cấu hình Rclone để kết nối với tài khoản Google Drive hoặc Dropbox của mình bằng lệnh rclone config. Quy trình này sẽ mở trình duyệt web để bạn xác thực và cấp quyền truy cập an toàn.

Xây dựng Script Backup Bash Cốt lõi

Script Bash là thành phần chính thực hiện toàn bộ logic backup. Chúng ta sẽ xây dựng một script mạnh mẽ, linh hoạt và dễ bảo trì. Dưới đây là phiên bản cơ bản với đầy đủ chức năng.

1. Cấu trúc và Khai báo Biến

Phần đầu script định nghĩa các biến cấu hình, giúp dễ dàng tùy chỉnh mà không cần sửa logic chính.

#!/bin/bash
# ==========================================
# Script Backup VPS lên Google Drive/Dropbox
# ==========================================

# --- CẤU HÌNH NGƯỜI DÙNG ---
BACKUP_NAME="my_vps_backup"
RCLONE_REMOTE="google_drive" # Tên remote đã cấu hình trong rclone config
REMOTE_PATH="/Backups/VPS/" # Đường dẫn thư mục trên cloud

# --- THƯ MỤC CẦN BACKUP ---
DIRS_TO_BACKUP=("/var/www/html" "/etc" "/home" "/opt/important_data")

# --- CẤU HÌNH MYSQL (nếu có) ---
MYSQL_USER="root"
MYSQL_PASSWORD="your_secure_password"
MYSQL_DATABASES=("database1" "database2" "wordpress_db")

# --- CẤU HÌNH KHÁC ---
BACKUP_DIR="/tmp/backup_${BACKUP_NAME}"
DATE=$(date +"%Y%m%d_%H%M%S")
FILENAME="backup_${BACKUP_NAME}_${DATE}.tar.gz"
LOG_FILE="/var/log/vps_backup.log"
RETENTION_DAYS=30 # Giữ bản backup trong 30 ngày

2. Logic Backup Chính và Xử lý Lỗi

Phần thân script thực hiện tuần tự các bước: tạo thư mục tạm, backup file, backup database, nén, upload và dọn dẹp. Mỗi bước đều có ghi log và kiểm tra lỗi.

# Hàm ghi log với timestamp
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Hàm xử lý lỗi nghiêm trọng
error_exit() {
log "LỖI: $1"
exit 1
}

log "Bắt đầu quy trình backup: $BACKUP_NAME"

# Tạo thư mục backup tạm thời
mkdir -p "$BACKUP_DIR" || error_exit "Không thể tạo thư mục $BACKUP_DIR."

# 1. Backup các thư mục được chỉ định
log "Đang backup các thư mục..."
for DIR in "${DIRS_TO_BACKUP[@]}"; do
if [ -d "$DIR" ]; then
tar -czf "${BACKUP_DIR}/$(basename $DIR).tar.gz" -C "$(dirname $DIR)" "$(basename $DIR)"
log " Đã backup: $DIR"
else
log " Cảnh báo: Thư mục $DIR không tồn tại, bỏ qua."
fi
done

# 2. Backup MySQL databases (nếu được cấu hình)
if [ -n "$MYSQL_PASSWORD" ] && [ ${#MYSQL_DATABASES[@]} -gt 0 ]; then
log "Đang backup cơ sở dữ liệu MySQL..."
for DB in "${MYSQL_DATABASES[@]}"; do
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" --single-transaction "$DB" > "${BACKUP_DIR}/${DB}.sql" 2>/dev/null
if [ $? -eq 0 ]; then
log " Đã backup database: $DB"
else
log " Cảnh báo: Không thể backup database $DB"
fi
done
fi

# 3. Đóng gói toàn bộ thành một file nén
log "Đang nén toàn bộ backup..."
tar -czf "/tmp/$FILENAME" -C "$BACKUP_DIR" . || error_exit "Nén thất bại."
BACKUP_SIZE=$(du -h "/tmp/$FILENAME" | cut -f1)
log "File backup đã tạo: /tmp/$FILENAME (Kích thước: $BACKUP_SIZE)"

# 4. Upload lên dịch vụ đám mây (Google Drive/Dropbox)
log "Đang upload lên $RCLONE_REMOTE..."
rclone copy "/tmp/$FILENAME" "$RCLONE_REMOTE:$REMOTE_PATH" --log-file="$LOG_FILE" --stats-one-line
if [ $? -eq 0 ]; then
log "Upload thành công lên $RCLONE_REMOTE:$REMOTE_PATH"
else
error_exit "Upload thất bại!"
fi

# 5. Dọn dẹp file tạm ở local
rm -rf "$BACKUP_DIR"
rm -f "/tmp/$FILENAME"
log "Đã dọn dẹp file tạm."

# 6. (Tùy chọn) Quản lý bản backup cũ trên cloud
log "Đang xóa các bản backup cũ hơn $RETENTION_DAYS ngày..."
rclone delete "$RCLONE_REMOTE:$REMOTE_PATH" --min-age ${RETENTION_DAYS}d --log-file="$LOG_FILE"

log "Quy trình backup hoàn tất thành công!"
exit 0

Tích hợp với Cron để Chạy Tự động

Để script chạy tự động hàng ngày, hàng tuần, chúng ta sử dụng Cron. Mở crontab của user root hoặc user có đủ quyền:

crontab -e

Thêm dòng sau để chạy backup vào 2 giờ sáng mỗi ngày:

0 2 * * * /bin/bash /path/to/your/backup_script.sh

Bạn có thể điều chỉnh lịch trình linh hoạt:
- 0 2 * * 0: Chạy lúc 2h sáng mỗi Chủ Nhật.
- 0 2 1 * *: Chạy lúc 2h sáng ngày đầu tiên của mỗi tháng.
- 0 */6 * * *: Chạy mỗi 6 giờ.

Sau khi lưu crontab, hệ thống sẽ tự động thực thi backup theo lịch đã định. Bạn có thể kiểm tra log tại /var/log/vps_backup.log để giám sát.

Nâng cao và Tối ưu hóa

1. Mã hóa Backup trước khi Upload

Để tăng cường bảo mật, bạn có thể mã hóa file backup bằng GPG trước khi upload lên cloud. Thêm các bước sau vào script:

GPG_RECIPIENT="[email protected]"
# ... sau khi tạo file /tmp/$FILENAME ...
gpg --encrypt --recipient "$GPG_RECIPIENT" --output "/tmp/${FILENAME}.gpg" "/tmp/$FILENAME"
# Sau đó upload file .gpg thay vì file .tar.gz

2. Backup Tăng tiến (Incremental Backup)

Backup toàn bộ mỗi lần có thể tốn băng thông và không gian lưu trữ. Rclone hỗ trợ chế độ --backup-dir để thực hiện incremental backup, chỉ upload những file thay đổi.

3. Giám sát và Thông báo

Kết nối script với dịch vụ thông báo như SendEmail, Telegram Bot API hoặc Slack Webhook để gửi cảnh báo khi backup thất bại hoặc thành công. Điều này giúp bạn chủ động hơn trong việc quản lý.

4. Backup nhiều Remote cùng lúc

Để tuân thủ nguyên tắc 3-2-1 Backup Rule (3 bản copy, 2 loại phương tiện, 1 bản offsite), bạn có thể upload cùng một file backup lên cả Google Drive và Dropbox, hoặc thêm một remote khác như AWS S3.

for REMOTE in google_drive dropbox s3_bucket; do
rclone copy "/tmp/$FILENAME" "$REMOTE:$REMOTE_PATH"
done

Kết luận

Thiết lập hệ thống backup tự động là bước không thể thiếu trong quy trình vận hành VPS chuyên nghiệp. Với sự kết hợp của script Bash, Rclone và Cron, bạn có thể xây dựng một giải pháp mạnh mẽ, linh hoạt và tiết kiệm chi phí, đảm bảo dữ liệu luôn được bảo vệ an toàn trên nền tảng đám mây uy tín. Hãy bắt đầu triển khai ngay hôm nay, kiểm tra kỹ lưỡng quy trình backup và khôi phục, để có thể yên tâm tập trung vào phát triển kinh doanh thay vì lo lắng về rủi ro mất dữ liệu.

Lưu ý quan trọng: Luôn thử nghiệm khôi phục dữ liệu từ bản backup định kỳ để đảm bảo quy trình hoạt động chính xác khi cần thiết. An toàn dữ liệu là trách nhiệm liên tục, không phải một lần cài đặt.