สำรองข้อมูลบน DigitalOcean: Backups, Snapshots และแผนกู้คืน Droplet ที่ใช้ได้จริง
อธิบายความต่างระหว่าง Droplet Backups กับ Snapshots, วิธีเปิดใช้และกู้คืน, snapshot ของ Volume, การ dump ฐานข้อมูล, ส่งสำเนาออกนอกเครื่องไปยัง Spaces และกฎ 3-2-1 สำหรับเว็บไซต์ทุกขนาด
ทำไมต้องวางแผนสำรองข้อมูลตั้งแต่วันแรก
เซิร์ฟเวอร์ล่มได้ ดิสก์เสียได้ คนลบไฟล์ผิดได้ และโดนแฮกก็เกิดขึ้นได้ DigitalOcean ดูแลฮาร์ดแวร์ให้ แต่ ข้อมูลในเครื่องเป็นความรับผิดชอบของผู้ใช้ (shared responsibility) การไม่มีแผนสำรองข้อมูลเป็นความเสี่ยงที่เกิดบ่อยที่สุดของมือใหม่ บทความนี้อธิบายเครื่องมือที่มีและวิธีผสมกันให้ครอบคลุม
เครื่องมือหลัก 3 แบบเทียบกัน
| หัวข้อ | Droplet Backups | Snapshots | สำรองเอง (rsync/dump → Spaces) |
|---|---|---|---|
| ใครสั่ง | ระบบอัตโนมัติตามรอบ | สั่งเองหรือสคริปต์/API | สคริปต์ของเรา cron |
| ความถี่ | ตามแผนที่เปิด (รายสัปดาห์เป็นพื้นฐาน; ตรวจตัวเลือกรายวันในหน้า Control Panel) | ตามที่เราสั่ง | ตามที่เราตั้งได้ละเอียดที่สุด |
| จำนวนที่เก็บ | ระบบหมุนเวียนจำนวนจำกัด | ไม่จำกัดตามที่จ่าย | ตามที่เก็บ |
| ใช้กู้คืน | ทั้งเครื่อง หรือสร้าง Droplet ใหม่จาก backup | ทั้งเครื่อง หรือสร้าง Droplet ใหม่ | เฉพาะไฟล์/ฐานข้อมูลที่ต้องการ |
| ค่าใช้จ่าย | เปอร์เซ็นต์ของราคา Droplet | คิดตามขนาดข้อมูลที่เก็บ | ตามพื้นที่ Spaces ที่ใช้ |
| ข้อดี | ไม่ต้องทำอะไร | ทำก่อนอัปเกรดใหญ่ได้ทันที | ย้ายออกนอกระบบ ละเอียดสุด |
| ข้อจำกัด | จุดกู้คืนห่างกัน | ต้องสั่งเอง | ต้องเขียนและทดสอบสคริปต์เอง |
ตัวเลขเปอร์เซ็นต์ค่า Backups และราคา Snapshots เปลี่ยนได้ ให้ดูหน้า Pricing ของ DigitalOcean และสรุปต้นทุนรวมที่ ราคา DigitalOcean ทุกบริการ
Droplet Backups
เปิดใช้
- ตอนสร้าง Droplet: ติ๊กตัวเลือก Enable Backups ในขั้นตอนเพิ่ม option
- เปิดภายหลัง: เลือก Droplet → แท็บ Backups → Enable
ระบบจะถ่ายสำเนาทั้งดิสก์ตามรอบโดยอัตโนมัติ และเก็บชุดล่าสุดตามจำนวนที่แผนกำหนด
ข้อควรรู้
- Backup ถ่ายขณะเครื่องทำงานอยู่ จึงเป็นแบบ crash-consistent ไม่รับประกันว่าฐานข้อมูลที่กำลังเขียนจะอยู่ในสภาพสมบูรณ์ ควรมี dump ฐานข้อมูลแยกต่างหาก
- ถ้าลบ Droplet ทิ้ง backup ที่ผูกกับ Droplet นั้นจะหายไปด้วย
- Backup ไม่ครอบคลุม Volume ที่ต่อเพิ่ม (ต้องทำ snapshot แยก)
- จุดกู้คืนห่างกันตามรอบ ถ้าต้องการสูญเสียข้อมูลน้อยกว่านั้น ต้องสำรองเพิ่มเอง
Snapshots
Snapshot คือภาพจำลองของดิสก์ ณ ขณะที่สั่ง เก็บอยู่แยกจาก Droplet แม้ลบ Droplet แล้ว snapshot ยังอยู่ (และยังคิดค่าเก็บ)
สร้าง snapshot
- (แนะนำ) หยุดบริการที่เขียนข้อมูล หรือ Power off Droplet เพื่อให้ข้อมูลสอดคล้องกันที่สุด
- เลือก Droplet → Snapshots → ตั้งชื่อ → Take Snapshot
- รอจนเสร็จ (ขึ้นกับขนาดข้อมูล)
หรือใช้ doctl (CLI ของ DigitalOcean)
doctl compute droplet-action snapshot DROPLET_ID --snapshot-name "before-upgrade-2026-11-04" --wait
doctl compute snapshot list
ใช้ snapshot ทำอะไรได้บ้าง
- ก่อนอัปเกรดระบบ/ปลั๊กอินใหญ่ ถ้าพังก็กู้กลับได้
- สร้างเซิร์ฟเวอร์ที่เหมือนกัน (clone) จาก snapshot เพื่อทดสอบหรือขยายเครื่อง
- ย้ายภูมิภาค ส่งสำเนา snapshot ไปภูมิภาคอื่นแล้วสร้าง Droplet ใหม่ที่นั่น
เก็บ snapshot ให้ไม่บวมค่าใช้จ่าย
- ตั้งชื่อใส่วันที่และเหตุผล
- ลบ snapshot ที่เก่าเกินความจำเป็นเป็นประจำ
- ตั้งเตือนทบทวนรายการทุกเดือน ดูแนวทางลดต้นทุนอื่นที่ 15 วิธีลดค่าใช้จ่าย DigitalOcean
Volume Snapshots
ข้อมูลบน Block Storage Volume ต้อง snapshot แยกจาก Droplet ที่ต่ออยู่ ไปที่ Volumes → เลือก Volume → Snapshots ถ้า Volume เก็บฐานข้อมูล ควร flush หรือหยุดบริการสั้นๆ ก่อนสั่ง
สำรองฐานข้อมูลและไฟล์ด้วยตัวเอง
วิธีนี้ละเอียดและย้ายออกนอกเครื่องได้ เหมาะเป็นชั้นที่สองต่อจาก Backups/Snapshots
dump MySQL/MariaDB
mysqldump --single-transaction --routines --triggers -u USER -p DBNAME | gzip > /var/backups/db-$(date +%F).sql.gz
dump PostgreSQL
pg_dump -U USER DBNAME | gzip > /var/backups/pg-$(date +%F).sql.gz
ส่งไป Spaces ด้วย s3cmd/rclone
ตั้ง rclone ให้ชี้ที่ Spaces (S3-compatible) ตามคู่มือใน คู่มือ Spaces Object Storage แล้ว
rclone copy /var/backups spaces:my-backup-bucket/server1 --max-age 2d
ตั้งตารางด้วย cron
# สำรองทุกวัน 03:15
15 3 * * * /home/deploy/backup.sh >> /var/log/backup.log 2>&1
ใน backup.sh ให้ dump → บีบอัด → อัปโหลด → ลบไฟล์ในเครื่องที่เก่ากว่า 7 วัน และอย่าลืมใช้ set -e
กฎ 3-2-1 สำหรับ Droplet
- 3 สำเนาของข้อมูล (ของจริง + 2 สำเนา)
- 2 สื่อเก็บที่ต่างกัน (เช่น ดิสก์ Droplet + Spaces)
- 1 สำเนาอยู่นอกที่เดียวกัน (เช่น คนละภูมิภาคหรือคนละผู้ให้บริการ)
แผนขั้นต่ำที่แนะนำสำหรับเว็บทั่วไป
- เปิด Droplet Backups
- dump ฐานข้อมูลทุกวัน ส่งไป Spaces
- snapshot ก่อนการเปลี่ยนแปลงใหญ่
- เก็บสำเนารายสัปดาห์ไว้นอกบัญชี DigitalOcean (เช่น ดาวน์โหลดลงเครื่องหรือคลาวด์อื่น)
ทดสอบการกู้คืน (ส่วนที่คนมักข้าม)
Backup ที่ไม่เคยลองกู้ ก็ไม่ใช่ backup ให้ทดสอบอย่างน้อยทุกไตรมาส
- สร้าง Droplet ทดสอบจาก snapshot/backup
- ตรวจว่าเว็บ ฐานข้อมูล และไฟล์อัปโหลดทำงานครบ
- ลองนำ dump ฐานข้อมูลไปกู้ในฐานข้อมูลเปล่า
- จดเวลาที่ใช้กู้จริง (RTO) และข้อมูลที่ขาดหายไป (RPO)
- ลบเครื่องทดสอบทิ้งเพื่อไม่เสียค่าใช้จ่ายต่อ
ตัวอย่างแผนตามประเภทเว็บ
| ประเภท | แผนแนะนำ |
|---|---|
| บล็อกส่วนตัว | Backups + dump รายสัปดาห์ |
| ร้านค้า/WooCommerce | Backups + dump ทุกวัน + ส่ง Spaces + snapshot ก่อนอัปเดต ดู ติดตั้ง WordPress บน DigitalOcean |
| แอปที่มีผู้ใช้เยอะ | Managed Database + backup ไฟล์ไป Spaces + Runbook กู้ระบบ |
| คอนเทนเนอร์ | สำรอง volume และไฟล์ compose ใน Git ดู ติดตั้ง Docker บน Droplet |
คำถามที่พบบ่อย
Snapshot กับ Backup อย่างไหนดีกว่า
ไม่ได้แทนกัน Backups สะดวกเพราะอัตโนมัติ Snapshots ยืดหยุ่นเพราะสั่งได้ทุกเมื่อ ใช้ร่วมกันดีที่สุด และต้องมี dump ฐานข้อมูลเพิ่มสำหรับข้อมูลสำคัญ
กู้ไฟล์เดียวจาก Backup ได้ไหม
โดยทั่วไป Backup/Snapshot ของ Droplet กู้ทั้งเครื่อง วิธีเอาไฟล์เดียวคือสร้าง Droplet ชั่วคราวจาก backup แล้วคัดลอกไฟล์ออกมา
ลบ Droplet แล้ว snapshot ยังคิดเงินไหม
ใช่ snapshot ยังอยู่และยังคิดค่าเก็บตามขนาด ลบเองเมื่อไม่ต้องการแล้ว
ถูกแฮกแล้วใช้ Backup กู้ได้ไหม
กู้ได้ แต่ต้องเลือกจุดก่อนถูกเจาะ และต้องอุดช่องโหว่ เปลี่ยนรหัสผ่านและคีย์ทั้งหมดก่อนเปิดให้บริการอีกครั้ง ดูแนวป้องกันที่ คู่มือความปลอดภัยเซิร์ฟเวอร์