On m'a donné la tâche de configurer des sauvegardes incrémentielles pour le jeu de réplicas MongoDB, comme point de départ, bien sûr, je l'ai recherché sur Google et je n'ai rien trouvé sur les documents MongoDB, j'ai cependant trouvé cela question sur Stack Overflow, ce qui a encouragé à développer ma propre solution car je n'ai pas trouvé Tayra très active.
J'ai lu à propos de oplog
et j'ai réalisé qu'il était très facile de développer quelque chose pour rejouer le journal, mais il s'avère que je n'avais pas à le faire car mongorestore
le faisait pour moi.
Maintenant, j'ai une solution de travail avec les scripts bash et c'était assez facile, c'est la raison pour laquelle je demande ici s'il y a un défaut dans ma logique, ou peut-être quelque chose qui me mordra à l'avenir.
Ci-dessous, comment j'ai mis en œuvre cela:
db.fsyncLock()
Enregistrer la dernière position de l'oplog
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Déverrouiller les écritures db.fsyncUnlock()
Vider l'oplog à partir de la position d'oplog enregistrée sur la sauvegarde complète (ou la dernière incrémentielle):
mongodump --Host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1
--query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
Enregistrer la dernière position d'oplog (de la même manière que pour les sauvegardes complètes)
mongod
local*
et mongod.lock
cette technique de restauration est appelée reconfigurer en cassant le miroirlocal
Lorsque nous avons créé une sauvegarde incrémentielle, il l'a stockée comme ceci:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Nous sommes instérés sur oplog.rs.bson
Mais nous devrons le renommer, voici donc les étapes:
cd /mnt/mongo-test_backup/1/local
rm *.json
mv oplog.rs.bson oplog.bson
le restaurer:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
Je l'ai tout scripté, je peux le valider sur GitHub plus tard.
La question est de savoir s'il y a un défaut dans la logique? Je suis un peu méfiant car la procédure est assez simple et je ne la trouve toujours pas documentée.
Pour répondre à ta question. Non! Il n'y a aucun échec sur votre logique et cela devrait fonctionner sans problème. Cependant, si des instantanés LVM peuvent être utilisés, il est préférable de faire des sauvegardes.