ความเสียหายของข้อมูลบน VPS เกิดได้จากหลายสาเหตุ ทั้งที่ป้องกันได้และป้องกันไม่ได้ ไม่ว่าจะเป็น hardware failure, ransomware, human error (ลบไฟล์ผิด), หรือ OS corruption หลังอัปเดตพลาด
ตัวเลขที่น่ากลัวจากงานวิจัยด้านความปลอดภัยข้อมูล:
AsiaGB VPS มี backup 2 ครั้งต่อเดือน (วันที่ 1 และ 15 ของเดือน) ซึ่งเป็น safety net ระดับ provider แต่สำหรับข้อมูลที่เปลี่ยนแปลงทุกวัน คุณต้องวางกลยุทธ์เพิ่มเติมเองด้วย
3-2-1 Rule คือมาตรฐานอุตสาหกรรมที่ใช้กันทั่วโลก มีความหมายดังนี้:
| เลข | ความหมาย | ตัวอย่าง |
|---|---|---|
| 3 | มี 3 สำเนาของข้อมูล | ข้อมูลต้นฉบับ + backup local + backup remote |
| 2 | เก็บบน 2 media type ต่างกัน | SSD (VPS) + Object Storage (S3/R2) |
| 1 | 1 สำเนาต้องอยู่ offsite | Cloudflare R2, Backblaze B2, หรือ VPS อีกเครื่อง |
ก่อนเลือกเครื่องมือ ต้องเข้าใจประเภท backup ก่อน:
| ประเภท | วิธีการ | พื้นที่ | เวลา Restore | เหมาะกับ |
|---|---|---|---|---|
| Full Backup | สำเนาทุกไฟล์ทั้งหมด | มาก | เร็ว | Weekly backup, initial backup |
| Incremental | สำเนาเฉพาะที่เปลี่ยนแปลงนับจาก backup ล่าสุด | น้อยมาก | ช้า (ต้องรวม chain) | Daily backup |
| Differential | สำเนาทุกอย่างที่เปลี่ยนนับจาก Full ล่าสุด | ปานกลาง | ปานกลาง | ต้องการ restore เร็ว |
| เครื่องมือ | จุดเด่น | เหมาะกับ | ยาก/ง่าย |
|---|---|---|---|
| rsync | มาพร้อม Linux, ไม่ต้องติดตั้ง, รองรับ SSH | ผู้เริ่มต้น, backup ง่ายๆ | ⭐ ง่าย |
| BorgBackup | Deduplication, Encryption, Compression | Production VPS, ต้องการประหยัด space | ⭐⭐ ปานกลาง |
| Restic | รองรับ S3/B2/R2 โดยตรง, fast, cross-platform | Backup ไปยัง Cloud Storage | ⭐⭐ ปานกลาง |
| Duplicati | มี GUI, Encrypted, รองรับ Cloud | ผู้ที่ต้องการ GUI | ⭐ ง่าย |
| mysqldump / pg_dump | Built-in สำหรับ MySQL/PostgreSQL | Database backup โดยเฉพาะ | ⭐ ง่าย |
rsync เป็นจุดเริ่มต้นที่ดีที่สุด ไม่ต้องติดตั้งเพิ่ม และเข้าใจง่าย
# บน VPS ต้นทาง สร้าง key pair
ssh-keygen -t ed25519 -C "backup-key" -f ~/.ssh/backup_key -N ""
# copy public key ไปยัง backup server
ssh-copy-id -i ~/.ssh/backup_key.pub user@backup-server
#!/bin/bash
# /usr/local/bin/vps-backup.sh
DATE=$(date +%Y-%m-%d)
BACKUP_USER="backup"
BACKUP_HOST="backup-server.example.com"
BACKUP_PATH="/backups/myvps/$DATE"
LOG="/var/log/backup.log"
echo "[$DATE] Starting backup..." >> $LOG
rsync -avz --delete \
-e "ssh -i /root/.ssh/backup_key -o StrictHostKeyChecking=no" \
/var/www/ /etc/ /home/ \
$BACKUP_USER@$BACKUP_HOST:$BACKUP_PATH/ >> $LOG 2>&1
if [ $? -eq 0 ]; then
echo "[$DATE] Backup completed successfully" >> $LOG
else
echo "[$DATE] Backup FAILED!" >> $LOG
fi
# crontab -e
# รันทุกคืน 02:00 AM
0 2 * * * /usr/local/bin/vps-backup.sh
--exclude='/proc' --exclude='/sys' --exclude='/dev' --exclude='/tmp' เพื่อข้าม virtual filesystem และลดขนาด backup ที่ไม่จำเป็น
BorgBackup เหมาะกับ VPS ที่ข้อมูลเปลี่ยนน้อยแต่ต้องเก็บ history นาน เพราะมีระบบ deduplication — ข้อมูลที่เหมือนกันจะเก็บแค่ครั้งเดียว ประหยัด storage ได้ 40–60%
# ติดตั้ง
apt install borgbackup -y
# สร้าง repository (ครั้งแรกครั้งเดียว)
borg init --encryption=repokey user@backup-server:/backups/borg-repo
# Backup
borg create --stats --progress \
user@backup-server:/backups/borg-repo::$(date +%Y-%m-%d) \
/var/www /etc /home
# ดูรายการ archive ทั้งหมด
borg list user@backup-server:/backups/borg-repo
# Restore archive เฉพาะ date
borg extract user@backup-server:/backups/borg-repo::2026-09-20 \
var/www/html/important.php
# เก็บ 7 วันล่าสุด, 4 สัปดาห์, 6 เดือน
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
user@backup-server:/backups/borg-repo
| ประเภทข้อมูล | ความถี่แนะนำ | วิธีที่เหมาะ |
|---|---|---|
| Database (MySQL/PostgreSQL) | ทุก 4–6 ชั่วโมง หรือทุกวัน | mysqldump + cron, pt-online-schema-change |
| File uploads / user content | ทุกวัน | rsync incremental หรือ Restic |
| Config files (/etc) | ก่อนแก้ไขทุกครั้ง + รายสัปดาห์ | git + rsync |
| Application code | ทุก deploy (ผ่าน Git) | Git repository เป็น backup หลัก |
| System snapshot | รายสัปดาห์ | VPS Snapshot จาก provider |
mysqldump --single-transaction เพื่อ lock-free backup ที่ consistent หากใช้ InnoDB ไม่ควร copy ไฟล์ .ibd ขณะ MySQL ยังรัน
การมี backup แต่ไม่เคยทดสอบ restore เหมือนซื้อประกันที่ไม่เคยอ่านเงื่อนไข — ไม่รู้ว่าใช้ได้จริงหรือเปล่าจนกว่าจะเกิดเหตุ
mysqldump --single-transaction เพื่อ consistent snapshot โดยไม่ lock table สำหรับ PostgreSQL ใช้ pg_dump ซึ่ง safe โดยธรรมชาติ ทั้งสองวิธีทำ backup ขณะ database รัน production ได้