2012-01-19 27 views
8

Zgodnie z tytułem, mam bazę danych z całą gamą typów plików (np. Tekst, pdf, xls) i chcę wykonać kopię zapasową tej bazy danych w najprostszy sposób.Jak najprościej wykonać kopię zapasową bazy danych MongoDB GridFS?

Replikacja nie jest opcją. Najlepiej chciałbym zrobić zwykły sposób bazy danych zrzucania bazy danych do pliku, a następnie wykonać kopię zapasową tego pliku (który może być użyty do odtworzenia całej bazy danych w 100% później, jeśli to konieczne). Czy można to zrobić za pomocą mongodump? Chcę również, aby kopia zapasowa była przyrostowa. Czy to będzie problem z GridFS i mongodump?

Co najważniejsze, czy to najlepszy sposób na zrobienie tego? Nie jestem zaznajomiony z MongoDB, czy mongodump działa tak samo dobrze jak mysqldump z MySQL? Co to jest najlepsza praktyka dla kopii zapasowych przyrostowych i MongoDBGridFS?

Używam Linux, jeśli to robi jakąkolwiek różnicę.

Odpowiedz

15

GridFS przechowuje pliki w dwóch kolekcjach: fs.files i fs.chunks.

Więcej informacji na ten temat można znaleźć w dokumencie GridFS Specyfikacja: http://www.mongodb.org/display/DOCS/GridFS+Specification

Oba zbiory mogą być wspierane za pomocą mongodump, tak samo jak każdy inny kolekcji. Dokumentacja na mongodump można znaleźć tutaj: http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongodump

z terminala, będzie to wyglądać mniej więcej tak:

Na tej demonstracji, nazywam dB jest „gridFS”:

pierwsze, mongodump służy do OBEJRZEĆ fs.files i fs.chunks zbiory do folderu na pulpicie:

$ bin/mongodump --db gridFS --collection fs.chunks --out /Desktop 
connected to: 127.0.0.1 
DATABASE: gridFS  to  /Desktop/gridFS 
    gridFS.fs.chunks to /Desktop/gridFS/fs.chunks.bson 
     3 objects 
$ bin/mongodump --db gridFS --collection fs.files --out /Desktop 
connected to: 127.0.0.1 
DATABASE: gridFS  to  /Desktop/gridFS 
    gridFS.fs.files to /Users/mbastien/Desktop/gridfs/gridFS/fs.files.bson 
     3 objects 

teraz mongorestore służy do wyciągania kopii zapasowych zbiorów do nowego (dla celów demonów tracja) bazy danych o nazwie „gridFScopy”

$ bin/mongorestore --db gridFScopy --collection fs.chunks /Desktop/gridFS/fs.chunks.bson 
connected to: 127.0.0.1 
Thu Jan 19 12:38:43 /Desktop/gridFS/fs.chunks.bson 
Thu Jan 19 12:38:43  going into namespace [gridFScopy.fs.chunks] 
3 objects found 
$ bin/mongorestore --db gridFScopy --collection fs.files /Desktop/gridFS/fs.files.bson 
connected to: 127.0.0.1 
Thu Jan 19 12:39:37 /Desktop/gridFS/fs.files.bson 
Thu Jan 19 12:39:37  going into namespace [gridFScopy.fs.files] 
3 objects found 

Teraz Mongo shell jest uruchamiany, tak aby przywrócić można zweryfikować:

$ bin/mongo 
MongoDB shell version: 2.0.2 
connecting to: test 
> use gridFScopy 
switched to db gridFScopy 
> show collections 
fs.chunks 
fs.files 
system.indexes 
> 

zbiorach fs.chunks i fs.files zostały pomyślnie przywrócone nowy DB.

Możesz napisać skrypt, aby okresowo wykonywać mongodump na kolekcjach fs.files i fs.chunks.

Jeśli chodzi o przyrostowe kopie zapasowe, nie są one obsługiwane przez MongoDB. Wyszukiwarka Google dla „MongoDB przyrostowych kopii zapasowych” ujawnia dobry MongoDB-user Google Groups dyskusję na ten temat: http://groups.google.com/group/mongodb-user/browse_thread/thread/6b886794a9bf170f

Dla ciągłych kopii zapasowych, wielu użytkowników korzysta z zestawu replik. (Zdawszy sobie sprawę, że w pierwotnym pytaniu stwierdziliście, że nie jest to opcja. Jest to uwzględnione dla innych członków społeczności, którzy mogą czytać tę odpowiedź.) Członek zestawu replik może zostać ukryty, aby upewnić się, że nigdy nie będzie Główny i nigdy nie będzie czytany. Więcej informacji na ten temat można znaleźć w sekcji "Opcje członkowskie" w dokumentacji konfiguracji zestawu replik. http://www.mongodb.org/display/DOCS/Replica+Set+Configuration#ReplicaSetConfiguration-Memberoptions

+0

Mimo że MongoDB nie ma żadnych przyrostowych możliwości tworzenia kopii zapasowych, każde zewnętrzne przyrostowe zadanie kopii zapasowej powinno co najmniej być w stanie zobaczyć, że istnieją stare i nowe pliki fs.files/fs.chunks i tylko tworzyć nowe kopie zapasowe? Zamierzam trochę się z tym pobawić. Replikacja w moim umyśle jest trochę pobieżna, nie chciałbym być zależny od MongoDB dla kopii zapasowych. A do tego najlepiej chciałbym zrobić codzienną migawkę do celów archiwizacji. Bardzo dziękuję, bardzo informacyjny. – c00kiemonster

+2

Jeśli zbiór docelowy już istnieje, mongorestore przejdzie przez _id każdego dokumentu i doda tylko nowe dokumenty. Możesz dostarczyć zapytanie do mongodump, więc jeśli twoje dokumenty zawierają pole "ostatnio zaktualizowane" lub równoważne, możesz zrzucić tylko te dokumenty, które zostały zaktualizowane lub dodane po dacie ostatniej kopii zapasowej. Możesz także użyć innego narzędzia, aby wykonać kopię zapasową katalogu dbpath. Jest kilka uwag na ten temat w sekcjach "Kopie zapasowe z włączonym rejestrowaniem" i "Zamykanie i tworzenie kopii zapasowych" dokumentacji Mongo na temat kopii zapasowych. http://www.mongodb.org/display/DOCS/Backups – Marc

+0

To byłoby bardzo przydatne. Dzięki za wskazówkę – c00kiemonster