Operations

Cách backup VPS trước khi nâng cấp an toàn

Bạn vừa bấm nút "nâng cấp RAM" hoặc "đổi OS mới" trên control panel, vài phút sau VPS không lên lại được. Lỗi kernel, partition bị resize sai, hoặc đơn giản là bản cập nhật xung đột với ứng dụng đang chạy. Nếu không có bản sao lưu từ trước, bạn mất cả ngày để dựng lại từ đầu. Bài này sẽ chỉ bạn cách backup VPS trước khi nâng cấp, đủ 3 lớp: snapshot trên control panel, dump database, và nén thư mục dữ liệu. Môi trường áp dụng là VPS Linux phổ biến (Ubuntu 24.04, Debian 12) có quyền root, dùng chung cho các bài nâng cấp OS, RAM, hoặc chuyển nhà cung cấp.

Yêu cầu trước khi bắt đầu

  • VPS chạy Linux (Ubuntu 24.04 hoặc Debian 12) với quyền truy cập root hoặc sudo.
  • Quyền truy cập control panel của nhà cung cấp (Virtualizor, Proxmox, hoặc trang quản trị riêng).
  • Máy tính cá nhân có đủ dung lượng ổ cứng để chứa bản backup nén về.
  • Biết rõ ứng dụng đang chạy trên VPS: web server, database (MySQL/MariaDB/PostgreSQL), Docker, hay ứng dụng Node.js.

Vì sao phải backup trước khi nâng cấp

Nâng cấp VPS không đơn giản là "thêm RAM rồi chạy tiếp". Khi bạn thay đổi cấu hình phần cứng, kernel có thể bị rebuild lại. Khi bạn cài lại OS, toàn bộ ổ đĩa sẽ bị format. Dù nhà cung cấp có uy tín đến đâu, thao tác nâng cấp vẫn có rủi ro: mất điện giữa chừng, lỗi firmware, hoặc đơn giản là gói cài đặt mới không tương thích với ứng dụng bạn đang dùng.

Bản backup tốt là bản bạn hiếm khi phải dùng đến. Nhưng khi cần, nó phải hoạt động. Một bản snapshot chết hoặc file dump bị lỗi còn tệ hơn không có backup, vì bạn sẽ tự tin bấm nút nâng cấp mà không biết mình đang đánh bạc. Vì vậy, sau khi backup xong, bạn phải kiểm tra file đó mở được, database đó đọc được.

Bước 1 - Chụp snapshot VPS trên control panel

Snapshot là bản sao toàn bộ ổ đĩa của VPS tại một thời điểm. Đây là lớp backup nhanh nhất và an toàn nhất, vì nó bao gồm cả hệ điều hành, cấu hình, và dữ liệu. Hầu hết nhà cung cấp VPS hiện nay đều có tính năng này trên control panel. Với VPS Linux của thueVPS, bạn vào mục Snapshot trong Virtualizor, đặt tên và bấm chụp. Quá trình mất vài phút, tùy dung lượng ổ đĩa.

# Trên control panel, tìm mục Snapshot / Backup
# Bấm "Create" / "Add Snapshot"
# Đặt tên rõ ràng: vd "truoc-nang-cap-ram-2026-06"
# Chờ trạng thái chuyển sang "Available" hoặc "Completed"

Lưu ý: snapshot chỉ nằm trên hạ tầng của nhà cung cấp. Nếu nhà cung cấp gặp sự cố mất dữ liệu, snapshot cũng có thể biến mất. Vì vậy, snapshot chỉ là lớp backup thứ nhất. Bạn vẫn cần làm tiếp 2 lớp bên dưới.

Verify: sau khi snapshot xong, hãy thử khôi phục snapshot đó sang một VPS tạm (nếu nhà cung cấp hỗ trợ) hoặc ít nhất kiểm tra trạng thái hiển thị "Available". Đừng bao giờ nâng cấp khi snapshot vẫn đang ở trạng thái "Processing".

Bước 2 - Backup database bằng mysqldump hoặc pg_dump

Snapshot bảo vệ toàn bộ ổ đĩa, nhưng database thì cần backup riêng ở mức logic. Lý do: khi bạn khôi phục snapshot, database có thể bị hỏng nếu có ghi dữ liệu ngay tại thời điểm chụp. Dump database tạo ra file SQL thuần, bạn có thể import vào bất kỳ máy nào, không phụ thuộc phiên bản hay hệ điều hành.

Với MySQL hoặc MariaDB, dùng mysqldump. Lệnh sau backup toàn bộ database vào một file nén, kèm timestamp để dễ nhận biết:

# Backup toàn bộ database MySQL/MariaDB
mysqldump -u root -p --all-databases --single-transaction --routines --triggers | gzip > /root/backup-$(date +%Y%m%d).sql.gz

# Kiểm tra file tạo ra
ls -lh /root/backup-*.sql.gz

Giải thích các flag: --single-transaction giúp dump nhất quán mà không khóa bảng (chỉ áp dụng cho InnoDB), --routines--triggers giữ lại stored procedure và trigger. Với PostgreSQL, dùng lệnh tương ứng:

# Backup toàn bộ database PostgreSQL
pg_dumpall -U postgres | gzip > /root/backup-pg-$(date +%Y%m%d).sql.gz

# Kiểm tra
ls -lh /root/backup-pg-*.sql.gz

Verify: giải nén và xem nội dung file có đúng định dạng SQL không:

# Giải nén và xem 20 dòng đầu
zcat /root/backup-*.sql.gz | head -20
# Phải thấy "CREATE TABLE" hoặc "INSERT INTO"

Bước 3 - Nén toàn bộ thư mục dữ liệu quan trọng

Database không phải là thứ riêng biệt cần backup. Cấu hình ứng dụng, thư mục upload, code nguồn, và file cấu hình Nginx cũng quan trọng không kém. Cách đơn giản nhất là nén toàn bộ thư mục cần thiết thành một file tar.gz. Sau đây là các thư mục phổ biến bạn nên nén:

Thư mụcNội dung
/etc/nginx, /etc/apache2Cấu hình web server
/etc/ssl, /etc/letsencryptChứng chỉ SSL và key
/var/wwwCode nguồn website
/homeDữ liệu người dùng
/opt, /srvỨng dụng hoặc dữ liệu dịch vụ
/etc/systemd/systemFile service tự tạo
# Nén các thư mục quan trọng
tar -czvf /root/backup-data-$(date +%Y%m%d).tar.gz \
  /etc/nginx \
  /etc/letsencrypt \
  /var/www \
  /home \
  /etc/systemd/system

# Kiểm tra file được tạo
ls -lh /root/backup-data-*.tar.gz

Lệnh này tạo file nén theo timestamp, tránh ghi đè lần backup trước. Lưu ý: nếu bạn đang chạy Docker, đừng nén toàn bộ /var/lib/docker khi container đang chạy, dữ liệu có thể không nhất quán. Thay vào đó, dùng docker commit cho từng container hoặc backup volume:

# Backup toàn bộ volume Docker
tar -czvf /root/backup-docker-volumes-$(date +%Y%m%d).tar.gz /var/lib/docker/volumes

Bước 4 - Tải backup về máy cá nhân hoặc nơi lưu trữ khác

Ba lớp backup ở trên đều nằm trên chính VPS. Nếu ổ đĩa chết hoặc VPS bị mất, bạn mất tất cả. Vì vậy, bước cuối cùng là tải các file backup về máy cá nhân hoặc lên một nơi lưu trữ khác. Đơn giản nhất là dùng scp từ máy tính của bạn:

# Chạy trên máy tính cá nhân, không phải trên VPS
scp root@your-server-ip:/root/backup-*.sql.gz /root/backup-data-*.tar.gz /mnt/backup-local/

Nếu bạn có tài khoản S3, Google Drive, hoặc dịch vụ lưu trữ đám mây khác, có thể dùng rclone để đẩy file lên tự động. Cách làm chi tiết đã được đề cập trong bài dùng rclone backup VPS lên Google Drive. Đây là bước nhiều người bỏ qua, nhưng nó quyết định bản backup có thực sự an toàn hay không.

Verify: sau khi tải về, hãy giải nén thử một file trên máy cá nhân, đảm bảo file không bị hỏng trong quá trình truyền:

# Trên máy cá nhân
tar -tzvf backup-data-*.tar.gz | head -10

Xử lý lỗi thường gặp khi backup

Lỗi 1: mysqldump báo "Access denied". Nguyên nhân: user root của MySQL không có quyền hoặc bạn chưa nhập đúng mật khẩu. Kiểm tra quyền bằng lệnh sau rồi backup lại:

mysql -u root -p -e "SHOW GRANTS FOR CURRENT_USER();"

Lỗi 2: Không đủ dung lượng ổ đĩa. File backup chiếm nhiều chỗ, đặc biệt khi database lớn. Kiểm tra trước khi backup:

df -h /root

Nếu ổ đĩa gần đầy, bạn cần xử lý VPS bị full disk trước, hoặc nén file với mức nén cao hơn bằng flag -9 của gzip.

Lỗi 3: File backup tải về bị hỏng. Nguyên nhân thường do kết nối mạng bị ngắt giữa chừng. Kiểm tra checksum trên cả VPS và máy cá nhân:

# Trên VPS
md5sum /root/backup-data-*.tar.gz

# Trên máy cá nhân, so sánh kết quả
md5sum backup-data-*.tar.gz

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

Backup VPS trước khi nâng cấp mất bao lâu?

Tùy dung lượng dữ liệu. Snapshot trên control panel thường mất 1-5 phút, dump database vài trăm MB mất 1-2 phút. Nén thư mục dữ liệu có thể lâu hơn, nhưng tổng thời gian thường dưới 15 phút với VPS có dữ liệu dưới 20GB.

Có cần tắt VPS trước khi chụp snapshot không?

Không bắt buộc. Hầu hết nhà cung cấp hiện nay hỗ trợ snapshot nóng (live snapshot) không cần tắt máy. Tuy nhiên, nếu ứng dụng của bạn ghi dữ liệu liên tục (database, log), nên tắt service ghi dữ liệu hoặc chấp nhận snapshot có thể không chứa dữ liệu được ghi trong vài giây cuối.

Snapshot có thể thay thế hoàn toàn backup database không?

Không. Snapshot bảo vệ ở mức ổ đĩa, nhưng database cần backup ở mức logic để phục hồi linh hoạt hơn (ví dụ chỉ phục hồi một bảng). Ngoài ra, nếu bạn chuyển sang VPS của nhà cung cấp khác, file snapshot có thể không tương thích, trong khi file .sql.gz thì import ở đâu cũng được.

Sau khi nâng cấp thành công, có được xóa backup không?

Nên giữ backup ít nhất 7-14 ngày sau khi nâng cấp, để đảm bảo hệ thống mới hoạt động ổn định. Xóa sớm đồng nghĩa với việc bạn mất cơ hội quay lại trạng thái cũ nếu phát hiện lỗi muộn.

Nâng cấp RAM hoặc CPU có cần backup không?

Có, vẫn nên backup. Dù nâng cấp tài nguyên ít rủi ro hơn cài lại OS, nhưng quá trình này có thể gây reboot bất ngờ hoặc lỗi kernel. Một bản snapshot mất 5 phút còn rẻ hơn nhiều so với một đêm thức trắng khôi phục dữ liệu.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.