❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Server chạy ngon lành cả năm trời, rồi một ngày đẹp trời ổ cứng chết. Hoặc bạn chạy nhầm rm -rf ở sai thư mục. Hoặc bị hack và toàn bộ database bị xoá sạch. Lúc đó mà không có backup thì chỉ còn cách ngồi khóc.

linux b14 backup

Bài này mình sẽ đi từ gốc: tại sao cần backup, chiến lược backup chuẩn, rồi đến thực hành với tar, rsync, backup database, viết script tự động, và cả cách restore khi cần. Mục tiêu là cuối bài bạn có một hệ thống backup hoàn chỉnh chạy tự động mỗi đêm.

Tại sao cần backup VPS?

Câu trả lời ngắn: vì mất data là mất tất cả. Nhưng nhiều người vẫn chủ quan cho đến khi gặp sự cố thật.

Một vài tình huống thực tế mình từng thấy:

  • Ổ cứng hỏng: VPS dùng SSD cũng chết, đặc biệt các nhà cung cấp giá rẻ dùng phần cứng đời cũ. Không backup = mất sạch.
  • Lỗi người dùng: Chạy rm -rf /var/www nhầm thư mục, xoá nhầm database, update config sai rồi service không start được.
  • Bị hack: Attacker vào được server, encrypt toàn bộ data đòi tiền chuộc (ransomware). Hoặc đơn giản là xoá sạch rồi bỏ đi.
  • Provider gặp sự cố: Datacenter cháy, nhà cung cấp phá sản, xoá account nhầm. Chuyện này đã xảy ra nhiều lần trên thế giới.
  • Update hỏng hệ thống: Upgrade kernel hoặc package quan trọng mà không tương thích, server không boot được.

Nhiều VPS provider có tính năng snapshot hoặc backup, nhưng đừng phụ thuộc hoàn toàn vào đó. Snapshot của provider nằm cùng datacenter với VPS. Datacenter gặp sự cố thì snapshot cũng mất theo.

Quy tắc đơn giản: nếu data quan trọng với bạn, bạn phải tự backup. Không ai chịu trách nhiệm data của bạn ngoài chính bạn.

Chiến lược backup 3-2-1

Trước khi nhảy vào command line, bạn cần hiểu chiến lược backup chuẩn. Không phải cứ copy file ra một chỗ là xong.

Quy tắc 3-2-1 là chuẩn được dùng rộng rãi trong ngành:

  • 3 bản copy của data (bản gốc + 2 bản backup)
  • 2 loại storage khác nhau (ví dụ: SSD trên VPS + object storage như S3)
  • 1 bản offsite (ở vị trí địa lý khác, khác datacenter, khác provider)

Ví dụ áp dụng cho VPS:

  • Bản 1: Data gốc trên VPS
  • Bản 2: Backup nén lưu trên VPS (thư mục /backup)
  • Bản 3: Đồng bộ bản backup ra server khác hoặc cloud storage (S3, Google Drive)

Như vậy kể cả VPS chết hoàn toàn, bạn vẫn có bản backup ở nơi khác để khôi phục.

tar: đóng gói và nén backup

tar là công cụ đóng gói (archive) kinh điển trên Linux. Nó gom nhiều file và thư mục thành một file duy nhất, kết hợp nén để giảm dung lượng.

Tạo archive nén

Cú pháp cơ bản nhất để tạo backup nén:

tar czf backup.tar.gz /đường/dẫn/cần/backup

Giải thích các option:

  • c, create, tạo archive mới
  • z, nén bằng gzip
  • f, chỉ định tên file output

Ví dụ backup thư mục web:

# Backup toàn bộ thư mục web
tar czf /backup/web-2025-03-15.tar.gz /var/www
# Backup thư mục home
tar czf /backup/home-2025-03-15.tar.gz /home

Xem nội dung archive

Trước khi giải nén, bạn nên kiểm tra xem bên trong có gì:

# Liệt kê nội dung (verbose)
tar tzvf backup.tar.gz
# Chỉ liệt kê, không giải nén
# t = list, z = gzip, v = verbose, f = file

Output sẽ hiển thị danh sách file kèm quyền, owner, kích thước và ngày tháng. Rất hữu ích để xác nhận backup có đầy đủ hay không.

Giải nén archive

# Giải nén vào thư mục hiện tại
tar xzf backup.tar.gz

# Giải nén vào thư mục cụ thể tar xzf backup.tar.gz -C /tmp/restore

# x = extract, z = gzip, f = file

Exclude: loại bỏ file không cần backup

Không phải file nào cũng cần backup. Cache, log cũ, file tạm thì bỏ qua để giảm dung lượng:

# Exclude từng pattern
tar czf backup.tar.gz /var/www \
    --exclude='*.log' \
    --exclude='cache/*' \
    --exclude='node_modules' \
    --exclude='.git'
# Hoặc dùng file chứa danh sách exclude
tar czf backup.tar.gz /var/www --exclude-from=exclude-list.txt

File exclude-list.txt mỗi dòng một pattern:

*.log
cache/*
node_modules
.git
tmp/*

Nén bằng thuật toán khác

Ngoài gzip (z), bạn có thể dùng các thuật toán nén khác:

# bzip2 — nén tốt hơn gzip nhưng chậm hơn
tar cjf backup.tar.bz2 /var/www

# xz — nén tốt nhất nhưng chậm nhất tar cJf backup.tar.xz /var/www

# zstd — nhanh và nén tốt (cần cài zstd) tar --zstd -cf backup.tar.zst /var/www

Với backup hàng ngày, gzip là đủ tốt. Nếu muốn tiết kiệm dung lượng lưu trữ dài hạn, xz hoặc zstd là lựa chọn tốt hơn.

rsync: đồng bộ thông minh

Nếu tar là “đóng gói mọi thứ mỗi lần”, thì rsync thông minh hơn: nó chỉ copy những file thay đổi. Lần đầu chạy sẽ copy tất cả, nhưng những lần sau chỉ đồng bộ phần khác biệt. Nhanh hơn rất nhiều.

Cú pháp cơ bản

rsync -avz /nguồn/ /đích/

Các option quan trọng:

  • -a (archive), giữ nguyên quyền, owner, symlink, timestamp. Gần như luôn cần option này.
  • -v (verbose), hiển thị tiến trình
  • -z (compress), nén data khi truyền, hữu ích khi rsync qua mạng

Lưu ý dấu / cuối đường dẫn nguồn rất quan trọng. /var/www/ (có dấu /) sẽ copy nội dung bên trong. /var/www (không có dấu /) sẽ copy cả thư mục www. Cái này hay gây nhầm lẫn nên bạn cần nhớ kỹ.

Đồng bộ local

# Backup thư mục web sang ổ backup
rsync -avz /var/www/ /backup/www/
# Lần đầu: copy tất cả
# Lần sau: chỉ copy file thay đổi → nhanh hơn rất nhiều

rsync qua SSH (remote)

Đây là cách phổ biến nhất để backup ra server khác:

# Push: đẩy backup từ VPS sang server backup
rsync -avz /var/www/ user@backup-server:/backup/vps1/www/

# Pull: kéo data từ VPS về server backup rsync -avz user@vps-ip:/var/www/ /backup/vps1/www/

# Chỉ định port SSH khác rsync -avz -e 'ssh -p 2222' /var/www/ user@backup-server:/backup/www/

–delete: tạo mirror chính xác

Mặc định rsync chỉ thêm file mới và cập nhật file thay đổi. File đã xoá ở nguồn vẫn còn ở đích. Nếu muốn đích giống hệt nguồn (mirror), dùng --delete:

# Mirror: đích sẽ giống hệt nguồn
# File ở đích mà không có ở nguồn sẽ bị xoá
rsync -avz --delete /var/www/ /backup/www/

Cẩn thận với --delete. Nếu bạn nhầm nguồn và đích, hoặc nguồn bị trống (do mount lỗi chẳng hạn), rsync sẽ xoá sạch phía đích. Luôn chạy --dry-run trước khi dùng --delete.

–dry-run: chạy thử trước

# Chạy thử — chỉ hiển thị những gì SẼ làm, không thực sự copy/xoá gì
rsync -avz --delete --dry-run /var/www/ /backup/www/
# Xem output, nếu OK thì bỏ --dry-run để chạy thật

–exclude: loại bỏ file không cần

rsync -avz /var/www/ /backup/www/ \
    --exclude='cache/' \
    --exclude='*.log' \
    --exclude='node_modules/' \
    --exclude='.git/'

Một số option hữu ích khác

# --progress: hiển thị tiến trình từng file
rsync -avz --progress /var/www/ /backup/www/

# --bwlimit: giới hạn bandwidth (KB/s), tránh ảnh hưởng traffic VPS rsync -avz --bwlimit=5000 /var/www/ user@backup-server:/backup/www/

# --partial: giữ file truyền dở, tiếp tục lần sau thay vì truyền lại từ đầu rsync -avz --partial /var/www/ user@backup-server:/backup/www/

Backup database

Backup file thôi chưa đủ. Hầu hết ứng dụng web đều có database, và database không thể backup bằng cách copy file trực tiếp (vì data đang được ghi liên tục, copy giữa chừng sẽ bị corrupt).

Cách đúng là dùng công cụ dump của từng loại database. Nó sẽ xuất ra file SQL mà bạn có thể import lại sau.

MySQL / MariaDB

# Backup một database
mysqldump -u root -p my_database > my_database.sql

# Backup tất cả database mysqldump -u root -p --all-databases > all-databases.sql

# Backup kèm nén (tiết kiệm dung lượng đáng kể) mysqldump -u root -p my_database | gzip > my_database.sql.gz

# Backup với các option an toàn mysqldump -u root -p \ --single-transaction \ --routines \ --triggers \ my_database | gzip > my_database.sql.gz

Option --single-transaction quan trọng cho InnoDB: nó đảm bảo backup nhất quán mà không cần lock bảng, website vẫn chạy bình thường trong lúc backup.

PostgreSQL

# Backup một database
pg_dump my_database > my_database.sql

# Backup kèm nén pg_dump my_database | gzip > my_database.sql.gz

# Backup tất cả database pg_dumpall > all-databases.sql

# Custom format (nén sẵn, hỗ trợ restore chọn lọc) pg_dump -Fc my_database > my_database.dump

Ví dụ thực tế: backup WordPress

Một site WordPress điển hình cần backup 2 thứ: file (theme, plugin, upload) và database.

# Backup database WordPress
mysqldump -u wp_user -p'password' wordpress_db | gzip > /backup/wp-db-$(date +%Y%m%d).sql.gz
# Backup file WordPress
tar czf /backup/wp-files-$(date +%Y%m%d).tar.gz /var/www/wordpress \
    --exclude='cache/*'

Script backup tự động + Cron

Backup thủ công thì sớm muộn cũng quên. Giải pháp là viết script rồi cho cron chạy tự động mỗi đêm.

Script backup hoàn chỉnh

Tạo file /usr/local/bin/backup.sh:

#!/bin/bash
# Script backup VPS — chạy hàng đêm qua cron

# === CẤU HÌNH === BACKUP_DIR="/backup" DATE=$(date +%Y%m%d) KEEP_DAYS=7

# Thư mục cần backup WEB_DIR="/var/www" # Database DB_USER="root" DB_PASS="your_password" DB_NAME="wordpress_db"

# === TẠO THƯ MỤC === mkdir -p "$BACKUP_DIR"

# === BACKUP DATABASE === echo "[$(date)] Bắt đầu backup database..." mysqldump -u "$DB_USER" -p"$DB_PASS" \ --single-transaction \ --routines \ "$DB_NAME" | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

if [ $? -eq 0 ]; then echo "[$(date)] Backup database OK" else echo "[$(date)] LỖI: Backup database thất bại!" fi

# === BACKUP FILES === echo "[$(date)] Bắt đầu backup files..." tar czf "$BACKUP_DIR/web-$DATE.tar.gz" "$WEB_DIR" \ --exclude='cache/*' \ --exclude='*.log' \ --exclude='node_modules' \ 2>/dev/null

if [ $? -eq 0 ]; then echo "[$(date)] Backup files OK" else echo "[$(date)] LỖI: Backup files thất bại!" fi

# === XOÁ BACKUP CŨ === echo "[$(date)] Xoá backup cũ hơn $KEEP_DAYS ngày..." find "$BACKUP_DIR" -name "db-*.sql.gz" -mtime +$KEEP_DAYS -delete find "$BACKUP_DIR" -name "web-*.tar.gz" -mtime +$KEEP_DAYS -delete

# === TỔNG KẾT === echo "[$(date)] Backup hoàn tất. Danh sách file:" ls -lh "$BACKUP_DIR"

Phân quyền cho script:

chmod +x /usr/local/bin/backup.sh

Chạy thử trước

Trước khi đưa vào cron, hãy chạy tay một lần để đảm bảo mọi thứ hoạt động:

# Chạy thử
sudo /usr/local/bin/backup.sh
# Kiểm tra kết quả
ls -lh /backup/

Đặt lịch cron

# Mở crontab của root
sudo crontab -e

Thêm dòng sau:

# Backup hàng đêm lúc 2 giờ sáng, ghi log
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Giải thích: 0 2 * * * nghĩa là chạy lúc 2:00 AM mỗi ngày. Output và lỗi đều ghi vào /var/log/backup.log để bạn có thể kiểm tra sau.

Script này sẽ giữ 7 ngày backup gần nhất. Cũ hơn thì tự động xoá. Như vậy ổ đĩa không bị đầy mà bạn vẫn có đủ bản backup để khôi phục nếu cần.

Backup ra server khác (offsite)

Backup nằm trên cùng VPS thì chưa an toàn. VPS chết là mất cả data lẫn backup. Bạn cần đẩy backup ra nơi khác.

rsync qua SSH

Cách đơn giản nhất nếu bạn có thêm một VPS hoặc server khác:

# Đẩy thư mục backup sang server khác
rsync -avz /backup/ user@backup-server:/backup/vps1/
# Dùng SSH key để không cần nhập password (bắt buộc cho cron)
# Xem lại bài SSH để biết cách setup SSH key

Thêm vào cuối script backup:

# === ĐỒNG BỘ RA SERVER BACKUP ===
echo "[$(date)] Đồng bộ ra backup server..."
rsync -avz --delete /backup/ user@backup-server:/backup/vps1/ 2>&1
if [ $? -eq 0 ]; then
    echo "[$(date)] Đồng bộ offsite OK"
else
    echo "[$(date)] LỖI: Đồng bộ offsite thất bại!"
fi

rclone: backup lên cloud storage

Nếu không có server thứ hai, bạn có thể dùng rclone để đẩy backup lên các dịch vụ cloud storage như Amazon S3, Google Drive, Backblaze B2, hoặc bất kỳ dịch vụ nào hỗ trợ.

Cài đặt rclone:

# Ubuntu/Debian
sudo apt install rclone
# RHEL/Alma/Rocky
sudo dnf install rclone

Cấu hình remote (chạy một lần):

# Wizard cấu hình — chọn provider, nhập credentials
rclone config

Sau khi cấu hình xong, đồng bộ backup lên cloud:

# Đẩy lên S3 (hoặc S3-compatible như Backblaze B2)
rclone sync /backup/ s3-remote:my-backup-bucket/vps1/

# Đẩy lên Google Drive rclone sync /backup/ gdrive:VPS-Backup/vps1/

# Với bandwidth limit rclone sync /backup/ s3-remote:my-backup-bucket/vps1/ --bwlimit 10M

rclone sync giống rsync --delete: nó sẽ xoá file ở đích mà không có ở nguồn. Nếu muốn chỉ thêm mà không xoá, dùng rclone copy thay thế.

Restore: khôi phục khi cần

Backup mà không biết cách restore thì cũng như không. Phần này mình hướng dẫn cách khôi phục từ từng loại backup.

Restore từ tar

# Xem nội dung trước khi giải nén
tar tzvf /backup/web-20250315.tar.gz | head -20

# Giải nén vào thư mục tạm để kiểm tra mkdir /tmp/restore tar xzf /backup/web-20250315.tar.gz -C /tmp/restore

# Kiểm tra OK rồi thì copy về đúng vị trí # Hoặc giải nén trực tiếp (ghi đè file hiện tại) cd / tar xzf /backup/web-20250315.tar.gz

Restore từ rsync

# Từ backup local
rsync -avz /backup/www/ /var/www/

# Từ backup server rsync -avz user@backup-server:/backup/vps1/www/ /var/www/

# Dry-run trước cho chắc rsync -avz --dry-run user@backup-server:/backup/vps1/www/ /var/www/

Restore database

# MySQL/MariaDB — từ file .sql
mysql -u root -p my_database < my_database.sql
# MySQL/MariaDB — từ file nén .sql.gz
gunzip < /backup/db-20250315.sql.gz | mysql -u root -p my_database
# PostgreSQL — từ file .sql
psql my_database < my_database.sql
# PostgreSQL — từ custom format (.dump)
pg_restore -d my_database my_database.dump

Quy trình restore hoàn chỉnh cho WordPress

Ví dụ bạn cần restore một site WordPress trên VPS mới:

# 1. Cài web server và MySQL trên VPS mới (nginx, php, mysql)
# 2. Tạo database
mysql -u root -p -e "CREATE DATABASE wordpress_db;"
# 3. Restore database
gunzip < /backup/db-20250315.sql.gz | mysql -u root -p wordpress_db
# 4. Restore files
tar xzf /backup/web-20250315.tar.gz -C /
# 5. Kiểm tra quyền file
chown -R www-data:www-data /var/www/wordpress  # Ubuntu/Debian
chown -R nginx:nginx /var/www/wordpress         # RHEL/Alma/Rocky
# 6. Restart services
systemctl restart nginx php-fpm mysql

Test restore: bước quan trọng nhất

Đây là điều mà rất nhiều người bỏ qua: backup mà không test restore thì coi như không có backup.

Mình đã thấy nhiều trường hợp: backup chạy đều đặn mỗi đêm, nhưng khi cần restore mới phát hiện file backup bị lỗi, script backup thiếu thư mục quan trọng, hoặc database dump bị rỗng vì password thay đổi mà không ai cập nhật script.

Cách test đơn giản:

# 1. Kiểm tra file backup có đủ và hợp lệ không
ls -lh /backup/
# File có dung lượng hợp lý? File 0 byte = backup lỗi
# 2. Test giải nén archive
tar tzvf /backup/web-20250315.tar.gz > /dev/null
echo $?  # 0 = OK, khác 0 = file bị corrupt
# 3. Test database dump
gunzip < /backup/db-20250315.sql.gz | head -5
# Phải thấy header SQL, không phải file rỗng hoặc lỗi
# 4. Restore thử vào thư mục tạm
mkdir -p /tmp/restore-test
tar xzf /backup/web-20250315.tar.gz -C /tmp/restore-test
ls -la /tmp/restore-test/var/www/
# Dọn dẹp sau khi test
rm -rf /tmp/restore-test

Nếu muốn nghiêm túc hơn, bạn có thể thêm phần kiểm tra vào script backup:

# Thêm vào cuối backup.sh

# === KIỂM TRA BACKUP === echo "[$(date)] Kiểm tra backup..."

# Check file size (backup phải > 1KB) DB_SIZE=$(stat -c%s "$BACKUP_DIR/db-$DATE.sql.gz" 2>/dev/null || echo 0) WEB_SIZE=$(stat -c%s "$BACKUP_DIR/web-$DATE.tar.gz" 2>/dev/null || echo 0)

if [ "$DB_SIZE" -lt 1024 ]; then echo "[$(date)] CẢNH BÁO: Database backup quá nhỏ ($DB_SIZE bytes)!" fi

if [ "$WEB_SIZE" -lt 1024 ]; then echo "[$(date)] CẢNH BÁO: Web backup quá nhỏ ($WEB_SIZE bytes)!" fi

# Test tar integrity tar tzvf "$BACKUP_DIR/web-$DATE.tar.gz" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "[$(date)] CẢNH BÁO: File tar bị corrupt!" fi

Lịch test restore khuyến nghị:

  • Hàng ngày: Script tự kiểm tra file size và integrity (tự động)
  • Hàng tháng: Thử restore lên VPS test hoặc Docker container
  • Mỗi quý: Full disaster recovery test, restore toàn bộ lên VPS mới từ đầu

Tools nâng cao: restic và borgbackup

Với tarrsync, bạn có thể làm được hầu hết mọi thứ. Nhưng nếu cần backup incremental (chỉ lưu phần thay đổi), mã hoá (encryption), hoặc deduplicate (loại bỏ data trùng lặp), thì có hai công cụ mạnh hơn đáng để tìm hiểu.

restic

restic là tool backup hiện đại, hỗ trợ incremental backup, mã hoá mặc định, và backup trực tiếp lên nhiều loại storage (local, S3, SFTP, Backblaze B2, ...).

# Cài đặt
# Ubuntu/Debian
sudo apt install restic

# RHEL/Alma/Rocky sudo dnf install restic

# Khởi tạo repository (chạy một lần) restic -r /backup/restic-repo init # Nhập password — password này dùng để mã hoá, mất password = mất backup

# Tạo backup restic -r /backup/restic-repo backup /var/www /etc

# Backup lên S3 export AWS_ACCESS_KEY_ID="your-key" export AWS_SECRET_ACCESS_KEY="your-secret" restic -r s3:s3.amazonaws.com/my-backup-bucket backup /var/www

# Liệt kê các bản snapshot restic -r /backup/restic-repo snapshots

# Restore restic -r /backup/restic-repo restore latest --target /tmp/restore

# Xoá snapshot cũ, giữ 7 ngày gần nhất restic -r /backup/restic-repo forget --keep-daily 7 --prune

Điểm mạnh của restic:

  • Incremental: lần backup sau chỉ lưu phần thay đổi, tiết kiệm dung lượng đáng kể
  • Mã hoá mặc định: data được encrypt trước khi lưu
  • Deduplicate: file trùng lặp chỉ lưu một lần
  • Hỗ trợ nhiều backend storage

borgbackup

borgbackup (hay borg) cũng là tool backup incremental + mã hoá, tương tự restic nhưng ra đời trước và có cộng đồng lớn.

# Cài đặt
# Ubuntu/Debian
sudo apt install borgbackup

# RHEL/Alma/Rocky sudo dnf install borgbackup

# Khởi tạo repository borg init --encryption=repokey /backup/borg-repo

# Tạo backup borg create /backup/borg-repo::web-{now:%Y%m%d} /var/www /etc

# Backup qua SSH sang server khác borg create user@backup-server:/backup/borg-repo::web-{now:%Y%m%d} /var/www

# Liệt kê archives borg list /backup/borg-repo

# Restore borg extract /backup/borg-repo::web-20250315

# Xoá backup cũ, giữ 7 bản daily, 4 bản weekly borg prune /backup/borg-repo --keep-daily=7 --keep-weekly=4

Cả restic và borg đều là lựa chọn tốt. Nếu bạn mới bắt đầu, restic dễ setup hơn một chút. Nếu đã quen với command line thì borg cũng rất mạnh.

Với các VPS nhỏ chạy vài website, tar + rsync + script cron là quá đủ. Restic hoặc borg phù hợp hơn khi bạn quản lý nhiều server hoặc cần backup data lớn mà muốn tiết kiệm dung lượng lưu trữ.

Checkpoint: thực hành

Bạn đã nắm đủ kiến thức rồi. Giờ là lúc thực hành. Mình sẽ hướng dẫn bạn tạo một hệ thống backup hoàn chỉnh từ đầu đến cuối.

Bước 1: Tạo script backup

Tạo thư mục backup và script:

# Tạo thư mục
sudo mkdir -p /backup
# Tạo script
sudo nano /usr/local/bin/backup.sh

Copy nội dung script backup ở phần trước vào, chỉnh sửa các biến cho phù hợp với server của bạn (tên database, đường dẫn web, password database).

# Phân quyền
sudo chmod +x /usr/local/bin/backup.sh
# Chạy thử
sudo /usr/local/bin/backup.sh

Bước 2: Kiểm tra kết quả

# Xem file backup đã tạo
ls -lh /backup/
# Kiểm tra tar file
tar tzvf /backup/web-*.tar.gz | head
# Kiểm tra database dump
gunzip < /backup/db-*.sql.gz | head -10

Bước 3: Đặt cron chạy hàng đêm

# Mở crontab
sudo crontab -e
# Thêm dòng này:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Bước 4: Test restore

# Tạo thư mục test
mkdir -p /tmp/restore-test

# Restore file tar xzf /backup/web-*.tar.gz -C /tmp/restore-test

# Kiểm tra ls -la /tmp/restore-test/var/www/

# Dọn dẹp rm -rf /tmp/restore-test

Bước 5 (nâng cao): Setup offsite backup

Nếu bạn có server thứ hai:

# Setup SSH key (không password, cần cho cron)
ssh-keygen -t ed25519 -f ~/.ssh/backup-key -N ""
ssh-copy-id -i ~/.ssh/backup-key user@backup-server

# Test rsync rsync -avz -e 'ssh -i ~/.ssh/backup-key' /backup/ user@backup-server:/backup/vps1/

# Thêm vào script backup.sh

Nếu dùng cloud storage:

# Cài và cấu hình rclone
sudo apt install rclone   # hoặc dnf trên RHEL
rclone config             # theo wizard

# Test rclone copy /backup/ remote:backup-bucket/vps1/ --dry-run

# Chạy thật rclone copy /backup/ remote:backup-bucket/vps1/

Sau khi hoàn thành checkpoint này, bạn đã có một hệ thống backup chạy tự động: script backup web + database mỗi đêm, tự xoá bản cũ, và bạn biết cách restore khi cần. Với quy tắc 3-2-1, thêm bước offsite backup nữa là bạn có thể yên tâm ngủ ngon mà không lo mất data.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Trần Thắng

Trần Thắng

Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI