Tôi đã được giao nhiệm vụ thiết lập các bản sao lưu gia tăng cho bản sao MongoDB, vì điểm khởi đầu, dĩ nhiên, tôi đã googled nó và không thể tìm thấy bất cứ điều gì trên tài liệu MongoDB, tôi đã tìm thấy câu hỏi này trên Stack Overflow, khuyến khích phát triển giải pháp của riêng tôi Như không thấy Tayra rất năng động.
Tôi đã đọc oplog
và nhận ra rằng rất dễ dàng để phát triển một cái gì đó để phát lại nhật ký, nhưng hóa ra tôi không phải làm mongorestore
điều đó đối với tôi.
Bây giờ tôi có một giải pháp làm việc với các tập lệnh bash và nó khá dễ, đó là lý do tôi hỏi ở đây nếu có bất kỳ lỗ hổng nào trong logic của tôi, hoặc có thể một cái gì đó sẽ cắn tôi trong tương lai.
Dưới đây là cách tôi thực hiện:
Thủ tục sao lưu đầy đủ
- khóa viết trên một thành viên phụ
db.fsyncLock()
- Chụp ảnh
Ghi vị trí cuối cùng từ oplog
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Mở khóa viết
db.fsyncUnlock()
Thủ tục sao lưu gia tăng
- khóa viết trên một thành viên phụ
Kết xuất oplog từ vị trí oplog được ghi lại trên bản sao lưu đầy đủ (hoặc gia tăng mới nhất):
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
Ghi lại vị trí oplog mới nhất (giống như cách sao lưu toàn bộ)
- Mở khóa viết
Thủ tục khôi phục sao lưu đầy đủ
- dừng tất cả các trường hợp
mongod
- sao chép ảnh chụp vào thư mục dữ liệu của hộp sẽ là chính, nhưng đảm bảo loại trừ tất cả
local*
vàmongod.lock
kỹ thuật khôi phục này được gọi là cấu hình lại bằng cách phá vỡ gương - Bắt đầu chính
- cấu hình lại bản sao
- bắt đầu các phần phụ mà không có bất kỳ dữ liệu nào, hãy để chúng thực hiện đồng bộ hóa ban đầu. Hoặc sao chép dữ liệu từ chính mới với
local
cơ sở dữ liệu mới
Khôi phục sao lưu gia tăng
Khi chúng tôi tạo bản sao lưu gia tăng, nó lưu trữ như thế này:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Chúng tôi đang cố gắng oplog.rs.bson
nhưng chúng tôi sẽ phải đổi tên nó, vì vậy đây là các bước:
- thay đổi thư mục để sao lưu:
cd /mnt/mongo-test_backup/1/local
- xóa tập tin json
rm *.json
- đổi tên tập tin bson
mv oplog.rs.bson oplog.bson
phục hồi lại nó:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
Tôi có tất cả kịch bản, tôi có thể cam kết nó trên GitHub sau.
Câu hỏi là nếu có bất kỳ lỗ hổng trong logic? Tôi hơi nghi ngờ vì thủ tục này khá đơn giản và tôi vẫn không thể tìm thấy nó được ghi lại ở bất cứ đâu.