Một kỹ sư xóa nhầm khoảng 300 GB dữ liệu. Rồi cả năm lớp sao lưu đều không dùng được. Kể lại theo bản phân tích của chính GitLab, để rút ra việc nên làm trước khi gõ một lệnh xóa.
Tóm lại: sao lưu chưa thử khôi phục thì chưa phải sao lưu.
Lưu ý: đây là chuyện có thật nhưng không phải chuyện của tác giả. Kể theo bản phân tích của GitLab, không đặt tên người kỹ sư, không đoán điều họ nghĩ.
| Thuật ngữ | Nói dễ hiểu |
|---|---|
| Máy chủ chính (primary) | Máy cơ sở dữ liệu đang chạy thật |
| Máy chủ phụ (secondary) | Máy sao chép lại máy chính để thay thế khi hỏng |
| Sao chép đồng bộ | Máy phụ liên tục nhận thay đổi từ máy chính |
| Sao lưu (backup) | Bản sao để khôi phục sau sự cố. Khác với sao chép đồng bộ |
| Ảnh chụp (snapshot) | Bản chụp trạng thái ổ đĩa tại một thời điểm |
| Không đổ lỗi (blameless) | Tìm điểm yếu của hệ thống, không tìm người để trách |
| Giờ (UTC) | Chuyện gì xảy ra |
|---|---|
| 1 | Một kỹ sư chụp ảnh ổ đĩa cơ sở dữ liệu để thử tải ở môi trường thử |
| 1 | Tải tăng vọt: thư rác và một tiến trình xóa dữ liệu chạy nhầm |
| 2 | Máy phụ ngừng sao chép. Phải dựng lại bằng tay, công cụ treo im lặng |
| 2 | Lệnh xóa chạy trên máy chính, khoảng 300 GB biến mất |
| +18 giờ | Chép dữ liệu về xong, GitLab.com chạy lại (1/2, 17:00) |
Bị xóa khỏi máy chủ chính trước khi lệnh bị dừng, chỉ một hai giây sau.
Xóa thư mục dữ liệu của máy phụ để dựng lại sao chép.
Lệnh chạy trên máy chính.
| Lớp | Vì sao không dùng được |
|---|---|
| Sao lưu hằng ngày | Sai phiên bản công cụ nên rỗng. Báo lỗi bằng email bị từ chối, không ai biết |
| Ảnh chụp ổ đĩa đám mây | Chưa bật cho máy chủ cơ sở dữ liệu |
| Ảnh chụp LVM | Mỗi 24 giờ, làm để chép sang môi trường thử. Chỉ có một bản tay 6 giờ trước |
| Sao chép sang máy phụ | Dành cho dự phòng, không phải khôi phục. Máy phụ vừa bị xóa để dựng lại |
| Bản ở môi trường thử | Có dữ liệu nhưng trên ổ đĩa chậm, ở vùng khác |
Ngoài một ảnh chụp tay tình cờ do chính kỹ sư đó chụp 6 giờ trước.
Theo GitLab, sao lưu không có người chịu trách nhiệm kiểm tra thường xuyên.
Không ai thử khôi phục trước khi cần. Cái chưa thử thì chưa biết có chạy.
Ảnh chụp tay trước sự cố, mất ít dữ liệu hơn bản 24 giờ.
Ổ đĩa chậm bị giới hạn khoảng 60 Mbps, nút thắt là ổ đĩa.
Để không dùng lại mã số đã cấp trước sự cố.
Cơ sở dữ liệu về lúc 17:20 UTC ngày 31/1.
17:00 UTC ngày 1/2, tạm chưa có webhook, dựng lại sau.
Xong khoảng 18:00 UTC cùng ngày.
Dự án mất thay đổi từ khoảng 17:20.
Bình luận mất.
Tài khoản tạo trong khoảng đó.
Kho mã Git và wiki (lưu riêng), khách hàng tự cài đặt.
Chỉ khôi phục kho mã, không có issue hay merge request.
Mốc cuối của khoảng mất dữ liệu ghi 23:30 ở một phần và 00:00 ở phần khác. Đừng coi là chính xác tuyệt đối.
Thư rác và một tiến trình xóa dữ liệu chạy nhầm.
Hệ thống không lưu nhật ký thay đổi để dùng lại.
Thiếu tài liệu, công cụ treo im lặng.
Thông báo lỗi bị từ chối, không ai biết.
Chưa bật cho máy chủ cơ sở dữ liệu.
Không ai kiểm tra việc khôi phục.
Dấu nhắc lệnh chưa đủ phân biệt.
Gõ nhầm lệnh.
Cho biết máy và môi trường.
Có bảng theo dõi công khai.
LVM cho cơ sở dữ liệu sản xuất (đã làm).
Bật cho máy chủ cơ sở dữ liệu.
Sao lưu phải chứng minh được.
Lưu nhật ký liên tục.
Cho việc dựng lại sao chép.
Giao một người lo độ bền dữ liệu.
Đọc tên máy trên dấu nhắc, đừng đoán.
In đường dẫn hiện tại trước khi xóa.
Chế độ chỉ liệt kê, xem sẽ xóa gì.
Đã khôi phục thử và thấy dữ liệu về.
Với dữ liệu sản xuất, thêm một cặp mắt rất rẻ.
Suy luận chung, GitLab không nói người đó mệt.
Dừng lệnh, báo ngay, đừng tự sửa lặng lẽ.
Đây là gợi ý của tác giả, không phải kết luận của GitLab.
Thời AI, mỗi agent có quyền xóa là một người gõ lệnh không bao giờ mệt và không thấy "có gì sai sai". Quyền tối thiểu, chỉ đọc trước, người duyệt.
Chưa từng thử thì bạn chưa có bản sao lưu, bạn chỉ có hy vọng.