Kiểm thử khôi phục: kiểm tra bản sao lưu trước
Cách tiến hành khôi phục thử, ghi lại những gì làm kết quả, và những bất ngờ điển hình chỉ lộ ra trong các buổi diễn tập, không phải trong thảm họa thực sự.
Cập nhật 23 tháng 8, 2026
Một bản sao lưu mà bạn chưa từng khôi phục thử thì không phải là bản sao lưu — đó chỉ là niềm hy vọng. Một lần khôi phục thử tốn một giờ mỗi quý và biến niềm hy vọng thành sự thật đã được kiểm chứng.
Cần kiểm tra những gì
Ba câu hỏi bạn cần có câu trả lời trước khi xảy ra sự cố:
- Tính đầy đủ. Bản sao lưu có chứa mọi thứ cần thiết để khởi động không: dữ liệu, cài đặt, khóa, chứng chỉ, lịch chạy.
- Khả năng đọc được. Tệp lưu trữ có mở được không, bản dump cơ sở dữ liệu có khôi phục không lỗi không.
- Thời gian. Một lần khôi phục đầy đủ sẽ tốn bao nhiêu giờ. Bạn cần biết con số này trước, chứ không phải phát hiện ra khi đang bị áp lực.
Cách thực hiện buổi diễn tập
Lựa chọn trung thực nhất là trên một máy riêng, không phải máy đang chạy thật. Thuê VDS-1 trong một tháng, khôi phục lên đó từ đầu, và bấm giờ.
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic snapshots
restic restore latest --target /restore
ls -la /restore
Khôi phục cơ sở dữ liệu:
docker compose up -d db
gunzip -c /restore/var/backups/db.sql.gz | docker compose exec -T db psql -U postgres app
docker compose exec -T db psql -U postgres app -c "select count(*) from users;"
Khởi động ứng dụng và mở nó trong trình duyệt — bước cuối cùng. Cho đến khi trang mở được, việc khôi phục vẫn chưa hoàn tất.
Một lựa chọn nhẹ hơn nhưng cũng hữu ích: chỉ khôi phục cơ sở dữ liệu vào một container riêng trên cùng máy và đảm bảo dữ liệu có mặt và còn mới.
Đừng chỉ kiểm tra xem việc giải nén có thành công không, mà còn kiểm tra ngày của dữ liệu. Một bản sao lưu được tạo đều đặn nhưng đã ngừng bao gồm thư mục cần thiết từ một tháng trước trông hoàn toàn bình thường trong danh sách ảnh chụp. Hãy so sánh số bản ghi trong các bảng và dấu thời gian của những tệp mới nhất.
Những gì thường bị phát hiện
- Tệp
.envbị bỏ quên. Dữ liệu vẫn còn, nhưng mật khẩu truy cập thì không. - Chứng chỉ bị bỏ quên. Trang web khởi động nhưng không phản hồi qua HTTPS.
- Lịch chạy bị bỏ quên. Mọi thứ vẫn hoạt động, nhưng các bản sao lưu không còn được tạo nữa — và bạn phát hiện ra điều đó một tháng sau.
- Thứ tự khởi động không được ghi lại. Ứng dụng khởi động trước cơ sở dữ liệu và bị crash.
- Mật khẩu kho lưu trữ chỉ nằm trên chiếc máy đã mất. Các bản sao lưu vẫn tồn tại, nhưng không có cách nào truy cập chúng.
- Việc khôi phục tốn mười giờ, không phải hai. Băng thông phía nhận hoặc khay đĩa, xem tốc độ đĩa.
Ghi lại trình tự
Dựa trên buổi diễn tập, hãy viết một hướng dẫn ngắn và giữ nó ở nơi khác ngoài máy chủ:
- Thuê một máy cùng tier hoặc lớn hơn — việc khởi tạo tốn khoảng một phút.
- Cài Docker và khôi phục
/opt/myapptừ bản sao lưu. - Khôi phục bản dump cơ sở dữ liệu, kiểm tra số bản ghi.
- Khôi phục
/etc/nginxvà chứng chỉ, khởi động máy chủ web. - Trỏ tên miền sang địa chỉ mới.
- Khôi phục lịch chạy từ
crontab.txt. - Kiểm tra: trang web mở được, đăng nhập hoạt động, các bản sao lưu lại được tạo.
Mục 5 là mục bị đánh giá thấp nhất. Các bản ghi DNS không cập nhật ngay lập tức, và bạn nên giảm TTL của bản ghi xuống 300 giây từ trước nếu bạn có tính đến việc di chuyển.
Tần suất
Mỗi quý một lần cho các dịch vụ chạy thật, mỗi sáu tháng một lần cho mọi thứ còn lại. Cộng thêm luôn sau bất kỳ thay đổi lớn nào: cơ sở dữ liệu mới, dịch vụ mới, di chuyển thư mục. Hãy đưa buổi diễn tập vào lịch, nếu không nó sẽ không bao giờ diễn ra.
Bản sao lưu nên chứa gì — chính xác cần sao lưu những gì. Lấy nó ở đâu — sao lưu ngoài site. Nếu sự cố đã xảy ra rồi — dữ liệu bị mất.