Trang chủBlogSao lưu VPS thế nào cho đúng: tự sao lưu hay dùng dịch vụ, giữ bao lâu, quy tắc 3-2-1
Sao lưu VPS thế nào cho đúng: tự sao lưu hay dùng dịch vụ, giữ bao lâu, quy tắc 3-2-1

Sao lưu VPS thế nào cho đúng: tự sao lưu hay dùng dịch vụ, giữ bao lâu, quy tắc 3-2-1

Kỹ thuật CloudNest Team 01 tháng 11, 2026 8 lượt xem

Hầu như ai thuê VPS cũng nghĩ mình "có sao lưu" — cho tới ngày cần khôi phục mới biết bản sao lưu nằm ngay trên chính cái máy vừa hỏng, đã cũ ba tháng, hoặc chưa ai từng thử mở ra. Bài này gom lại những gì cần biết để sao lưu VPS cho đúng: chống được những sự cố nào, quy tắc 3-2-1 áp vào VPS ra sao, tự sao lưu hay dùng dịch vụ, giữ bản bao lâu — kèm hai lần thử thật ngày 01/11/2026 trên VPS có cơ sở dữ liệu đang chạy.

QUY TẮC 3-2-1 · ÁP VÀO MỘT VPSđọc mục 2 để biết vì sao
3
bản dữ liệu
dữ liệu đang chạy trên VPS + 2 bản sao lưu
2
nơi lưu khác nhau
bản sao lưu không nằm chung hệ lưu trữ với VPS
1
bản ở bên ngoài
ngoài nhà cung cấp, do chính bạn giữ

1. Sao lưu để chống những gì

Trước khi chọn cách sao lưu, hãy hỏi: mình đang phòng sự cố nào? Mỗi lớp bảo vệ chỉ đỡ được một số tình huống. Bảng dưới so bốn thứ hay bị gọi chung là "sao lưu":

Sự cố
Lưu trữ dự phòng (RAID)
Bản chụp cùng chỗ
Sao lưu nền tảng
Bản tự giữ ở ngoài
Một ổ cứng vật lý hỏng
✓
△
✓
✓
Lỡ tay xoá, ghi đè dữ liệu
✗
✓
✓
✓
Cập nhật / plugin lỗi làm hỏng hệ thống
✗
✓
✓
△
Mã độc mã hoá dữ liệu trong VPS
✗
△
✓
✓
Sự cố cả cụm lưu trữ
✗
✗
✓
✓
Mất quyền vào tài khoản nhà cung cấp
✗
✗
✗
✓
✓ đỡ được · △ tuỳ trường hợp (bản tự giữ chỉ có phần dữ liệu bạn chọn, không có cả hệ điều hành; bản chụp cùng chỗ chỉ còn khi chính hệ lưu trữ đó còn nguyên, và có thể bị xoá theo nếu kẻ tấn công vào được nơi lưu) · ✗ không đỡ được.

Hai điều rút ra. Một: lưu trữ dự phòng không phải sao lưu — nó giữ dữ liệu khi ổ cứng hỏng, nhưng lệnh xoá của bạn (hay của mã độc) cũng được chép sang mọi bản dự phòng ngay lập tức. Hai: không lớp nào đỡ được hết, nên cần ít nhất hai lớp khác nhau — đó chính là ý của quy tắc 3-2-1.

2. Quy tắc 3-2-1 áp vào VPS

Quy tắc 3-2-1 được nhiếp ảnh gia Peter Krogh phổ biến từ những năm 2000 cho kho ảnh số, sau đó thành thước đo chung của ngành sao lưu: giữ 3 bản dữ liệu, trên 2 loại nơi lưu khác nhau, trong đó 1 bản ở ngoài. Với một VPS, có thể hiểu cụ thể như sau:

1
Bản đang chạy — chính VPS
Dữ liệu sống: website, cơ sở dữ liệu, tệp của phần mềm. Không tính là sao lưu.
Ổ VPS nằm trên hệ lưu trữ của nhà cung cấp.
2
Sao lưu nền tảng — kho ngoài cụm máy chủ
Bản chụp nguyên ổ đĩa mỗi ngày, lưu ở hệ lưu trữ khác với hệ đang chạy VPS. Khôi phục cả máy bằng một nút.
Trên CloudNest: Sao lưu tự động, gói Giữ 7 ngày hoặc Giữ 30 ngày.
3
Bản bạn tự giữ — ngoài nhà cung cấp
Phần dữ liệu quan trọng nhất (cơ sở dữ liệu, tệp tải lên) được xuất ra tệp rồi kéo về nơi khác: máy tính công ty, ổ NAS, dịch vụ lưu trữ khác.
Phòng tình huống xấu nhất: mất quyền vào tài khoản, hoặc cần mang dữ liệu sang nơi khác.

Ngành sao lưu ngày nay còn hay nhắc bản mở rộng 3-2-1-1-0: thêm 1 bản không thể sửa/xoá từ phía máy đang chạy (ngoại tuyến hoặc khoá ghi), và 0 lỗi khi kiểm tra khôi phục. Với VPS, "không thể xoá từ phía máy" đạt được dễ nhất bằng cách để máy của bạn kéo bản sao lưu về (mục 5), thay vì để VPS đẩy đi — VPS có bị chiếm quyền thì kẻ tấn công cũng không với tới bản đã nằm trên máy bạn.

3. Tự sao lưu hay dùng dịch vụ?

Sao lưu nền tảng (dịch vụ)
✓Chép nguyên ổ: hệ điều hành, phần mềm, cấu hình, dữ liệu
✓Không cài gì vào máy, không phải viết script
✓Khôi phục cả máy bằng một nút — vài phút
✓Kho nằm ngoài cụm máy chủ, VPS không với tới được
–Ở cùng nhà cung cấp với VPS
–Khôi phục là đưa cả ổ về một thời điểm
–Tốn phí theo dung lượng ổ
Tự sao lưu
✓Chọn đúng phần quan trọng (CSDL, tệp tải lên) — bản nhỏ, mang đi đâu cũng được
✓Giữ bao lâu tuỳ bạn, ở bất cứ đâu
✓Cơ sở dữ liệu được xuất "sạch" ở mức giao dịch
–Phải tự viết script, đặt lịch, theo dõi lỗi
–Khôi phục chậm: dựng máy mới, cài phần mềm, nạp lại dữ liệu
–Dễ "chạy lỗi âm thầm" nếu không ai kiểm tra

Câu trả lời ngắn: dùng cả hai. Sao lưu nền tảng lo việc "quay lại hôm qua trong vài phút" cho cả máy; bản tự giữ lo tình huống không thể lường trước và cho bạn quyền mang dữ liệu đi. Đó chính là bản thứ 2 và bản thứ 3 của quy tắc 3-2-1. Hai lần thử dưới đây đo từng cách trên cùng một cơ sở dữ liệu.

4. Thử thật 1: sao lưu nền tảng lúc cơ sở dữ liệu đang ghi

Nỗi lo hay gặp nhất: "Sao lưu lúc MySQL đang chạy thì bản sao có bị hỏng không?". Chúng tôi dựng một VPS thử Ubuntu 24.04 (1 vCPU, 2 GB RAM, Hà Nội), cài MariaDB 10.11, tạo bảng 1.000.000 đơn hàng (116 MiB), rồi cho một tiến trình ghi liên tục: mỗi nhịp thêm một dòng đánh số tăng dần vào bảng ghi và sửa một đơn ngẫu nhiên — khoảng 80 giao dịch mỗi giây. Giữa lúc đó, bấm Sao lưu ngay.

14:43:00
Bắt đầu ghi liên tục
~80 giao dịch/giây vào MariaDB.
14:43:13
Bấm Sao lưu ngay
Lượt vào hàng chờ.
14:44:00
Bản sao lưu được chụp
Ổ đĩa đóng băng đúng thời điểm này — CSDL vẫn ghi tiếp, không dừng.
14:46:52
Sao lưu xong
Đọc 7,1 GB dữ liệu trên ổ 20 GB, lưu 3,5 GB sau nén + mã hoá, chạy 2 phút 54 giây.
14:47:21
Dừng ghi
Tổng cộng 16.329 giao dịch đã ghi.
14:47:25
Bấm Khôi phục bản 14:44
Máy tạm tắt khi lượt bắt đầu.
14:49:16
Khôi phục xong — 1 phút 51 giây
Máy tự bật lại lúc 14:49:24.
14:49:36
MariaDB sẵn sàng
Tự chạy "crash recovery" 6.130 trang, mất 2 giây, không cần ai can thiệp.
nhật ký MariaDB + truy vấn kiểm tra sau khôi phục (rút gọn; giờ VPS là UTC = giờ VN − 7)
$ journalctl -u mariadb -b | grep -iE "crash recovery|recover|ready"
7:49:34 [Note] InnoDB: Starting crash recovery from checkpoint LSN=322649457
7:49:35 [Note] InnoDB: To recover: 6130 pages
7:49:36 [Note] /usr/sbin/mariadbd: ready for connections.

MariaDB> SELECT COUNT(*), MAX(n), MAX(ts) FROM shop.ghi;
4993    4993    2026-11-01 07:44:00.924152
MariaDB> -- đếm các dòng n không có dòng n+1 (kiểm đứt quãng)
1        ← chỉ dòng cuối cùng: dãy 1…4993 liền mạch
MariaDB> CHECK TABLE shop.orders, shop.ghi;
shop.orders  check  status  OK
shop.ghi     check  status  OK
MariaDB> SELECT COUNT(*) FROM shop.orders;
1000000

Đọc kết quả: bản sao lưu giữ đúng 4.993 giao dịch đầu tiên, giao dịch cuối mang giờ 14:44:00,92 — khớp thời điểm chụp tới phần giây. Không giao dịch nào bị cắt dở, không đứt quãng, hai bảng kiểm OK, đủ 1 triệu đơn. 11.336 giao dịch ghi sau lúc chụp thì không còn — đó là bản chất của mọi bản sao lưu, không phải lỗi.

Vì sao được như vậy? Bản sao lưu nền tảng chụp ổ đĩa tại một thời điểm, giống hệt trạng thái máy bị ngắt điện đột ngột đúng lúc đó. InnoDB (MariaDB/MySQL), PostgreSQL, SQL Server đều ghi nhật ký giao dịch trước khi ghi dữ liệu, nên khởi động lại sau mất điện sẽ tự hoàn tất những gì đã cam kết và bỏ những gì dở dang. Điều kiện là dùng bộ máy lưu trữ có nhật ký (InnoDB, không phải MyISAM) — mặc định của các bản MySQL/MariaDB hiện nay.

Với VPS Windows, bài hướng dẫn Sao lưu VPS có lần thử tương tự: ổ 60 GB khôi phục trong 3 phút 18 giây, tệp khớp từng byte theo SHA-256.

5. Thử thật 2: tự sao lưu cơ sở dữ liệu mỗi đêm

Bản thứ 3 của quy tắc 3-2-1 là bản bạn tự giữ. Với website hay phần mềm có cơ sở dữ liệu, cách gọn nhất là xuất CSDL ra tệp mỗi đêm bằng mysqldump, giữ vài ngày trên VPS, rồi kéo về máy khác. Đo trên cùng VPS thử, cùng bảng 1 triệu đơn hàng:

Xuất + nén
9,8 giây
116 MiB CSDL → tệp .sql.gz 34 MB
Xuất không nén
1,9 giây
tệp .sql 91 MB — nén tốn thêm thời gian, bớt 63% dung lượng
Nạp lại từ tệp
17,4 giây
vào CSDL mới, CHECKSUM khớp 100%
Kéo về máy khác
3,6 giây
tệp 34 MB, từ máy chủ ở TP.HCM bằng scp

Script dưới đây xuất CSDL shop ra tệp theo ngày và tự xoá bản cũ hơn 7 ngày. --single-transaction cho bản xuất nhất quán mà không khoá bảng (bảng InnoDB), website vẫn chạy bình thường trong lúc xuất. Đổi shop thành tên CSDL của bạn:

/root/sao-luu-csdl.sh
#!/bin/bash
# Sao lưu CSDL "shop" mỗi đêm, giữ 7 ngày gần nhất
set -euo pipefail
D=/var/backups/db
mkdir -p "$D"
F="$D/shop-$(date +%F).sql.gz"
mysqldump --single-transaction --quick shop | gzip > "$F"
find "$D" -name 'shop-*.sql.gz' -mtime +7 -delete
đặt lịch 02:30 mỗi đêm + chạy thử (VPS thử, 01/11/2026)
$ chmod +x /root/sao-luu-csdl.sh
$ (crontab -l 2>/dev/null; echo '30 2 * * * /root/sao-luu-csdl.sh') | crontab -
$ ls /var/backups/db      # trước khi chạy: 4 bản cũ 3, 6, 9, 12 ngày
shop-2026-10-20.sql.gz  shop-2026-10-23.sql.gz  shop-2026-10-26.sql.gz  shop-2026-10-29.sql.gz
$ /root/sao-luu-csdl.sh && ls /var/backups/db
shop-2026-10-26.sql.gz  shop-2026-10-29.sql.gz  shop-2026-11-01.sql.gz
# bản 9 và 12 ngày đã bị xoá, bản mới 34 MB được tạo

Chạy thật trên VPS thử: hai bản cũ hơn 7 ngày bị xoá, bản mới được tạo, mã thoát 0. Muốn nhận thư khi script lỗi, thêm dòng MAILTO=email@cua-ban ở đầu crontab (máy cần có dịch vụ gửi thư) hoặc cho script gọi API thông báo của bạn.

Kéo bản về máy của bạn. Windows 10/11 có sẵn scp (OpenSSH). Mở PowerShell trên máy tính công ty và chạy — có thể đặt lịch bằng Task Scheduler:

PowerShell trên máy của bạn — kéo mọi bản về D:\SaoLuu
PS> scp root@IP-VPS:/var/backups/db/shop-*.sql.gz D:\SaoLuu\
# lần thử: tệp 34 MB về sau 3,6 giây (máy chủ TP.HCM ← VPS Hà Nội)

Kéo về (máy bạn chủ động lấy) an toàn hơn đẩy đi (VPS gửi tới kho của bạn): VPS không cần giữ mật khẩu hay khoá vào kho của bạn, nên lỡ VPS bị chiếm quyền, các bản đã nằm trên máy bạn vẫn yên. Dùng khoá SSH thay mật khẩu cho việc kéo tự động — xem Bảo mật VPS: 10 việc nên làm ngay.

Trên VPS Windows, ý tưởng giống hệt: dùng công cụ sao lưu của chính phần mềm (SQL Server có lệnh BACKUP DATABASE, MySQL/MariaDB trên Windows vẫn có mysqldump), đặt lịch bằng Task Scheduler, rồi kéo tệp về máy khác.

6. Bao lâu một bản, giữ bao lâu?

Hai con số quyết định mọi thứ, dân vận hành gọi là RPO và RTO:

RPO
Chấp nhận mất tối đa bao nhiêu dữ liệu?
Bằng khoảng cách giữa hai bản sao lưu. Sao lưu mỗi ngày một lần ⇒ tệ nhất mất gần một ngày dữ liệu — như 11.336 giao dịch ghi sau lúc chụp ở lần thử 1. Cần ít hơn thì tăng nhịp xuất CSDL (mỗi giờ), hoặc bấm "Sao lưu ngay" trước mỗi việc rủi ro.
RTO
Mất bao lâu để chạy lại?
Khôi phục nền tảng: 1 phút 51 giây (Ubuntu ổ 20 GB) tới 3 phút 18 giây (Windows ổ 60 GB) là máy chạy lại nguyên trạng. Từ bản tự giữ: phải có máy, cài phần mềm (MariaDB: 49 giây), nạp dữ liệu (17,4 giây) và cấu hình lại — lâu hơn nhiều.

Giữ bao lâu phụ thuộc vào việc bạn phát hiện sự cố muộn tới đâu. Lỡ tay xoá thì biết ngay; nhưng dữ liệu bị sửa sai, website bị cài mã độc nằm chờ, hay mã độc mã hoá từ từ thì có khi cả tuần sau mới lộ — lúc đó các bản của mấy ngày gần nhất đều đã "dính". Gợi ý:

  • Máy ít thay đổi, dữ liệu không quá quan trọng: giữ 7 ngày là đủ.
  • Website bán hàng, kế toán, máy chủ game có dữ liệu người chơi: giữ 30 ngày (7 bản ngày + 4 bản tuần), cộng bản tự giữ hằng tháng ở nơi khác.
  • Dữ liệu phải lưu theo luật (hoá đơn, chứng từ): bản tự giữ theo tháng/năm, đúng thời hạn luật yêu cầu — đừng chỉ trông vào bản sao lưu ngắn ngày.
Danh sách Các bản sao lưu trên Portal CloudNest với hai bản 14:18 và 14:09 ngày 01/11/2026, mỗi bản có nút Khôi phục, và Lượt gần đây
Có nhiều bản để chọn: ở lần thử Windows, bản mới nhất (14:18) đã chứa dữ liệu hỏng — phải lùi về bản 14:09.

7. Bản sao lưu chưa từng khôi phục thử thì chưa chắc dùng được

Bản xuất có thể rỗng vì sai mật khẩu CSDL, script có thể dừng từ tháng trước vì đầy ổ mà không ai biết. Cách kiểm đơn giản, làm mỗi tháng một lần:

nạp thử bản xuất vào một CSDL riêng rồi so (lần thử 1/11: khớp)
$ mariadb -e "CREATE DATABASE shop_kiem"
$ gunzip -c /var/backups/db/shop-2026-11-01.sql.gz | mariadb shop_kiem
$ mariadb -e "CHECKSUM TABLE shop.orders, shop_kiem.orders"
shop.orders       866678679
shop_kiem.orders  866678679
$ mariadb -e "DROP DATABASE shop_kiem"

Ngoài ra: xem dung lượng tệp mỗi đêm có hợp lý không (đột ngột còn vài KB là có chuyện), và nhìn mục Lần thành công gần nhất ở tab Sao lưu của VPS. Với sao lưu nền tảng, Portal tự báo khi một lượt lỗi.

8. Danh sách việc cần làm

  1. 01Bật sao lưu nền tảng cho mọi VPS có dữ liệu — chọn giờ máy ít dùng.
  2. 02Chọn thời gian giữ theo việc bạn phát hiện sự cố nhanh hay chậm (7 hoặc 30 ngày).
  3. 03Bấm "Sao lưu ngay" trước mỗi lần cập nhật lớn, nâng cấp phần mềm, sửa CSDL.
  4. 04Đặt lịch xuất CSDL mỗi đêm (hoặc mỗi giờ nếu dữ liệu thay đổi nhanh), tự xoá bản cũ.
  5. 05Kéo bản xuất về máy khác — máy bạn kéo về, không để VPS đẩy đi.
  6. 06Bảo vệ tài khoản Portal bằng mật khẩu mạnh + passkey: mất tài khoản là mất cả VPS lẫn bản sao lưu nền tảng.
  7. 07Mỗi tháng nạp thử một bản xuất vào CSDL riêng và so checksum.
  8. 08Ghi lại cách khôi phục (bấm gì, nạp gì, theo thứ tự nào) để người khác làm được khi bạn vắng.

9. Câu hỏi thường gặp

Snapshot có phải là sao lưu không?

Bản chụp (snapshot) nằm cùng hệ lưu trữ với máy là "điểm quay lại" ngắn hạn, không phải sao lưu: hệ lưu trữ đó gặp sự cố thì mất cả máy lẫn bản chụp. Bản sao lưu đúng nghĩa phải được chép sang nơi khác — như kho ngoài cụm máy chủ của sao lưu nền tảng.

Đã có sao lưu nền tảng thì còn cần xuất CSDL không?

Nên có. Sao lưu nền tảng khôi phục được CSDL (lần thử 1 cho thấy MariaDB tự phục hồi sau 2 giây), nhưng nó đưa cả ổ về một thời điểm và nằm cùng nhà cung cấp. Bản xuất CSDL nhỏ, mang đi đâu cũng được, nạp riêng từng CSDL — là bản thứ 3 của quy tắc 3-2-1.

Mã độc mã hoá VPS có mã hoá luôn bản sao lưu không?

Bản sao lưu nền tảng nằm ở kho ngoài cụm máy chủ, VPS không có đường nào ghi vào đó, nên mã độc trong VPS không chạm được. Bản xuất CSDL nằm trên chính VPS thì có thể bị mã hoá theo — vì vậy phải kéo về máy khác. Điểm yếu còn lại là tài khoản Portal: hãy bật passkey.

Bao lâu sao lưu một lần là đủ?

Tối thiểu mỗi ngày một lần. Dữ liệu thay đổi liên tục (đơn hàng, giao dịch) thì xuất CSDL thêm mỗi giờ — một bản 116 MiB chỉ mất khoảng 10 giây.

Sao lưu có làm website chậm không?

Sao lưu nền tảng làm máy khựng dưới 1 giây lúc bắt đầu và lúc kết thúc lượt. mysqldump với --single-transaction không khoá bảng InnoDB nhưng có dùng CPU và ổ đĩa — nên đặt lịch vào giờ ít truy cập.

Lưu bản tự giữ ở đâu cho rẻ?

Bản xuất CSDL thường nhỏ (ví dụ 34 MB cho 1 triệu đơn hàng), nên máy tính công ty, ổ NAS hay dịch vụ lưu trữ trực tuyến sẵn có đều đủ. Điều quan trọng là nơi đó không phải chính VPS và không dùng chung tài khoản với VPS.

Có bản thứ 2 ngay hôm nay
Bật Sao lưu tự động ở tab Sao lưu của VPS — dùng thử 7 ngày miễn phí, không tự trừ tiền khi hết thử.
Chia sẻ:
ZaloGọi ngayTelegram