Backup là thứ bạn không bao giờ cần — cho đến khi bạn cần. Bài này hướng dẫn backup VPS đúng cách, từ thủ công đến tự động hoá.
Chiến lược backup 3-2-1
- 3 bản sao dữ liệu
- 2 loại storage khác nhau (VPS + cloud storage)
- 1 bản lưu ngoài site (off-site)
Backup bằng tar (Nén thư mục)
# Backup thư mục website
tar -czf /root/backup/web_$(date +%Y%m%d).tar.gz /var/www/html/
# Backup nhiều thư mục
tar -czf /root/backup/server_$(date +%Y%m%d_%H%M).tar.gz \
/var/www/ \
/etc/nginx/ \
/etc/ssl/
# Giải nén
tar -xzf /root/backup/web_20240315.tar.gz -C /restore/
# Xem nội dung file tar mà không giải nén
tar -tzf /root/backup/web_20240315.tar.gz | head -20
Backup MySQL/MariaDB
# Backup 1 database
mysqldump -u root -p mydb > /root/backup/mydb_$(date +%Y%m%d).sql
# Backup tất cả databases
mysqldump -u root -p --all-databases > /root/backup/all_dbs_$(date +%Y%m%d).sql
# Backup và nén ngay
mysqldump -u root -p mydb | gzip > /root/backup/mydb_$(date +%Y%m%d).sql.gz
# Restore từ backup
mysql -u root -p mydb < /root/backup/mydb_20240315.sql
# Restore từ file nén
gunzip < /root/backup/mydb_20240315.sql.gz | mysql -u root -p mydb
Backup bằng rsync (Đồng bộ sang server khác)
# Đồng bộ thư mục web sang backup server
rsync -avz --delete /var/www/ user@backup-server:/backup/www/
# Backup kèm SSH key và port tùy chỉnh
rsync -avz -e "ssh -p 2222 -i ~/.ssh/backup_key" \
/var/www/ \
user@backup-server:/backup/www/
# Dry run (kiểm tra trước khi copy)
rsync -avzn --delete /var/www/ user@backup-server:/backup/www/
Script backup tự động
nano /root/backup.sh
#!/bin/bash
# Backup script cho VPS
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/root/backups"
KEEP_DAYS=7
mkdir -p $BACKUP_DIR
echo "[$(date)] Bắt đầu backup..."
# Backup web files
tar -czf $BACKUP_DIR/web_$DATE.tar.gz /var/www/ 2>/dev/null
echo "[$(date)] Backup web: OK"
# Backup MySQL
mysqldump -u root --all-databases 2>/dev/null | gzip > $BACKUP_DIR/mysql_$DATE.sql.gz
echo "[$(date)] Backup MySQL: OK"
# Backup config files
tar -czf $BACKUP_DIR/configs_$DATE.tar.gz /etc/nginx/ /etc/php/ 2>/dev/null
echo "[$(date)] Backup configs: OK"
# Xoá backup cũ
find $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete
echo "[$(date)] Đã xoá backup cũ hơn $KEEP_DAYS ngày"
echo "[$(date)] Backup hoàn thành!"
chmod +x /root/backup.sh
# Test chạy thủ công
bash /root/backup.sh
Lên lịch cron tự động
crontab -e
Thêm các dòng:
# Backup hàng ngày lúc 2:00 AM
0 2 * * * /root/backup.sh >> /var/log/backup.log 2>&1
# Backup MySQL mỗi 6 giờ
0 */6 * * * mysqldump -u root --all-databases | gzip > /root/backups/mysql_$(date +\%Y\%m\%d_\%H\%M).sql.gz
Upload backup lên cloud (rclone)
# Cài rclone
curl https://rclone.org/install.sh | sudo bash
# Cấu hình (Google Drive, S3, Dropbox, OneDrive...)
rclone config
# Upload backup lên Google Drive
rclone copy /root/backups/ gdrive:VPS-Backups/
# Sync
rclone sync /root/backups/ gdrive:VPS-Backups/
Checklist backup
- Backup web files định kỳ
- Backup database định kỳ
- Backup cấu hình server (/etc/)
- Tự động hoá bằng cron
- Lưu backup ở nơi khác (không cùng VPS)
- Test restore định kỳ
- Giữ tối thiểu 7 ngày backup
Lời khuyên cuối: Backup tốt nhất là backup bạn thực sự có và có thể restore được. Hãy test restore ít nhất mỗi tháng một lần!
Có thể bạn cần xem thêm
Bài viết đã được kiểm duyệt bởi VPS HC Team
Cập nhật lần cuối: 16/06/2026