Saya diberi tugas untuk membuat cadangan tambahan untuk replika MongoDB, sebagai titik awal, tentu saja, saya meng-google-nya dan tidak dapat menemukan apa pun di dokumen MongoDB, namun saya menemukan pertanyaan tentang Stack Overflow ini, yang mendorong untuk mengembangkan solusi saya sendiri karena tidak menemukan Tayra sangat aktif.
Saya membaca oplog
dan menyadari sangat mudah untuk mengembangkan sesuatu untuk memutar ulang log, tetapi ternyata saya tidak harus mongorestore
melakukannya untuk saya.
Sekarang saya punya solusi yang berfungsi dengan skrip bash dan itu cukup mudah, itulah alasan saya bertanya di sini apakah ada kesalahan dalam logika saya, atau mungkin sesuatu yang akan menggigit saya di masa depan.
Di bawah ini cara saya menerapkannya:
Prosedur pencadangan penuh
- kunci menulis pada anggota sekunder
db.fsyncLock()
- Ambil foto
Rekam posisi terakhir dari oplog
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Buka kunci tulis
db.fsyncUnlock()
Prosedur pencadangan tambahan
- kunci menulis pada anggota sekunder
Dump oplog dari posisi oplog yang direkam dengan cadangan penuh (atau tambahan terbaru):
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
Rekam posisi oplog terbaru (dengan cara yang sama seperti untuk backup penuh)
- Buka kunci tulis
Prosedur pemulihan cadangan penuh
- hentikan semua contoh
mongod
- salin snapshot ke dir data dari kotak yang akan menjadi yang utama, tetapi pastikan untuk mengecualikan semua
local*
danmongod.lock
teknik pemulihan ini disebut rekonfigurasi dengan memecahkan cermin - Mulai primer
- mengkonfigurasi ulang replaset
- mulai sekunder tanpa data, biarkan mereka melakukan sinkronisasi awal. Atau salin data dari primer baru dengan
local
database baru
Kembalikan cadangan tambahan
Ketika kami membuat cadangan tambahan, ia menyimpannya seperti ini:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Kami telah ditanamkan oplog.rs.bson
tetapi kami harus mengganti nama, jadi inilah langkah-langkahnya:
- ubah direktori ke cadangan:
cd /mnt/mongo-test_backup/1/local
- hapus file json
rm *.json
- ganti nama file bson
mv oplog.rs.bson oplog.bson
pulihkan:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
Saya memiliki semua skrip, saya dapat mengkomitnya di GitHub nanti.
Pertanyaannya adalah apakah ada kesalahan dalam logika? Saya agak curiga karena prosedurnya cukup mudah dan saya masih belum menemukannya di mana pun.