Istnieje kilka sposobów tworzenia kopii zapasowej bazy danych w MongoDB. Jednym z szybkich sposobów na wykonanie kopii zapasowej bazy danych jest użycie mongodump narzędzie.
mongodump odczytuje dane z bazy danych MongoDB i tworzy pliki BSON o wysokiej wierności, które mongorestore narzędzie może użyć do przywrócenia bazy danych MongoDB.
Z mongodump , można wykonać kopię zapasową kolekcji, bazy danych lub wszystkich baz danych.
Sprawdź narzędzia bazy danych MongoDB
mongodump jest częścią pakietu MongoDB Database Tools. Narzędzia baz danych MongoDB to zestaw narzędzi wiersza poleceń do pracy z MongoDB.
Możesz mieć lub nie mieć MongoDB Database Tools/mongodump zainstalowany. Spróbuj uruchomić następujące polecenie w terminalu lub wierszu polecenia, aby sprawdzić:
mongodump --version Jeśli go nie masz, możesz skorzystać z instrukcji instalacji na stronie MongoDB, aby zainstalować go w swoim systemie.
Gdzie uruchamiać polecenia?
Musisz uruchomić mongodump polecenia z wiersza poleceń systemu (np. nowe okno terminala lub wiersza polecenia).
Nie uruchamiaj ich z mongo powłoka.
Utwórz kopię zapasową wszystkich baz danych
Aby wykonać kopię zapasową wszystkich baz danych i kolekcji w lokalnej instancji działającej na domyślnym porcie 27017, użyj mongodump polecenie bez żadnych argumentów.
mongodump
Uruchomienie powyższego kodu zrzuca wszystkie bazy danych do folderu o nazwie dump/ .
Zauważ, że wyklucza on local i config bazy danych.
Zwróć też uwagę, że mongodump przechwytuje tylko dokumenty w bazie danych. Kiedy wykonujesz przywracanie, mongorestore lub mongod musi odbudować indeksy po przywróceniu danych.
Oto jak wyglądają pliki w dump/ folder.
tree dump Wynik:
dump
├── PetHotel
│ ├── employees.bson
│ ├── employees.metadata.json
│ ├── owners.bson
│ ├── owners.metadata.json
│ ├── pets.bson
│ ├── pets.metadata.json
│ ├── pettypes.metadata.json
│ ├── players.bson
│ ├── players.metadata.json
│ ├── scores.bson
│ ├── scores.metadata.json
│ ├── students.bson
│ └── students.metadata.json
├── admin
│ ├── system.users.bson
│ ├── system.users.metadata.json
│ ├── system.version.bson
│ └── system.version.metadata.json
└── krankykranes
├── employees.bson
├── employees.metadata.json
├── products.bson
└── products.metadata.json
Te pliki są oczywiście specyficzne dla mojej instalacji MongoDB, która zawiera testowe bazy danych. W moim przypadku zrzucono 3 bazy danych:PetHotel , admin i krankykranes .
Utwórz kopię zapasową w określonej lokalizacji
Możesz użyć --out lub -o aby określić lokalizację do umieszczenia plików zrzuconych baz danych.
Przykład:
mongodump --out=data/backups/ Lub:
mongodump -o=data/backups/
W takim przypadku każdy folder bazy danych jest wyprowadzany bezpośrednio do data/backups/ folder (tzn. nie ma /dump/ folder).
Utwórz kopię zapasową określonej bazy danych
Możesz użyć --db parametr do określenia bazy danych do utworzenia kopii zapasowej.
mongodump --db=krankykranes
To zrzuca krankykranes bazy danych do domyślnego dump/ folder.
Utwórz kopię zapasową określonej kolekcji
Możesz użyć --collection lub -c aby określić kolekcję do utworzenia kopii zapasowej.
Przykład:
mongodump --db=krankykranes --collection=products Lub:
mongodump --db=krankykranes -c=products
To zrzuca products zbiór do dump/krankykranes folder.
Wykluczanie kolekcji
Możesz także użyć --excludeCollection parametr, aby określić konkretną kolekcję do wykluczenia z kopii zapasowej (tj. nie uwzględniać w kopii zapasowej).
Przykład:
mongodump --db=PetHotel --excludeCollection=employees
Spowoduje to zrzucenie wszystkich kolekcji z PetHotel baza danych z wyjątkiem employees kolekcja.
Aby wykluczyć więcej niż jedną kolekcję, użyj oddzielnego --excludeCollection parametr dla każdej kolekcji, którą chcesz wykluczyć.
Przykład:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
To nie obejmuje employees i students kolekcje z kopii zapasowej.
Możesz także użyć --excludeCollectionsWithPrefix parametr, aby wykluczyć kolekcje z podanym prefiksem.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
To zrzuca wszystkie kolekcje z wyjątkiem tych, które zaczynają się na literę p .
Poniższy wyklucza wszystkie kolekcje, które zaczynają się od pet .
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Możesz użyć wielu --excludeCollectionsWithPrefix argumenty, aby wykluczyć kolekcje z wieloma prefiksami.
Przykład:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s Skompresuj dane wyjściowe
Możesz użyć --gzip parametr do kompresji danych wyjściowych.
mongodump --gzip --db=krankykranes Powoduje to kompresję poszczególnych plików.
tree dump Wynik:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Widzimy, że wszystkie pliki mają .gz rozszerzenie.
Podczas wysyłania do pliku archiwum lub standardowego strumienia wyjściowego --gzip opcja kompresuje plik archiwum lub dane wyjściowe do strumienia.
Konwertuj widoki na kolekcje
Możesz użyć --viewsAsCollections parametr, aby wyeksportować widoki tylko do odczytu jako kolekcje.
mongodump --db=PetHotel --viewsAsCollections
Kiedy eksportujesz widok jako kolekcję, mongodump tworzy plik BSON zawierający dokumenty w widoku. Jeśli używasz mongorestore aby przywrócić utworzony plik BSON, widok zostanie przywrócony jako kolekcja.
Bez użycia tego argumentu mongodump eksportuje metadane każdego widoku. Jeśli dołączysz plik metadanych widoku w mongorestore operacja, widok zostanie odtworzony.
Korzystanie z --viewsAsCollections pomija również wszystkie kolekcje standardowe. Dlatego po uruchomieniu powyższego kodu mój dump/ struktura folderów wygląda tak:
tree dump Wynik:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
W moim PetHotel bazy danych, mam widok o nazwie pettypes . Kiedy eksportuję to jako widok, eksportowane są tylko metadane. Ale kiedy przekonwertuję go na kolekcję, pettypes.bson tworzony jest plik, którego nie byłoby, gdybym wyeksportował widok jako widok.
Oto, co się stanie, jeśli wyeksportuję ten widok bez konwertowania go na kolekcję.
mongodump --db=PetHotel --collection=pettypes Następnie uruchom drzewo polecenie, aby uzyskać strukturę folderów.
tree dump Wynik:
dump
└── PetHotel
└── pettypes.metadata.json Widzimy więc, że zrzucane są tylko metadane widoku.
Tryb cichy
Możesz użyć --quiet parametr, aby ograniczyć wyjście w oknie terminala lub wiersza polecenia.
mongodump --quiet Bez użycia tego prawdopodobnie zobaczysz dużą listę widoków, kolekcji itp., których kopie zapasowe są tworzone.
Tryb szczegółowy
Z drugiej strony możesz użyć --verbose lub -v parametry do zwiększenia dane wyjściowe w terminalu lub oknie wiersza poleceń.
mongodump --verbose
Możesz zwiększyć szczegółowość, powtarzając -v formularz wiele razy.
Przykład:
mongodump -vvvv Uruchomienie tego w moim systemie znacznie zwiększyło szczegółowość.
Wyniki zapytania o kopię zapasową
Możesz użyć --query lub -q parametry, aby zrzucić wynik zapytania.
Przykład:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }' Robiąc to, otocz zapytanie pojedynczymi cudzysłowami. Możesz użyć podwójnych cudzysłowów dla pól.
Archiwa i standardowe wyjście
Możesz użyć --archive lub parametr do zapisania wyjścia do określonego pliku archiwum lub, jeśli plik archiwum jest nieokreślony, na standardowe wyjście (stdout ) przesyłać strumieniowo, dzięki czemu można potokować do innego procesu.
Przykład wyprowadzania do pliku archiwum:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
W następnym przykładzie piszę do standardowego strumienia wyjściowego, a następnie przesyłam potok do mongorestore :
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Daje to nową kolekcję o nazwie dogs pojawiające się w PetHotel baza danych (a kolekcja zawiera tylko dokumenty, które mają type pole o wartości dog ).
Kontrola dostępu
Poprzednie przykłady zostały wykonane na komputerze lokalnym przy użyciu domyślnego portu. Oznaczało to, że mogliśmy uruchomić mongodump bez określania rzeczy takich jak --host , --port , --username itp.
Oto przykład, który używa tych parametrów do uwierzytelnienia jako homer :
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
Mogliśmy również użyć --password parametr, ale nie zrobiliśmy tego. Jeśli wpiszesz --user ale nie --password , zostaniesz poproszony o podanie hasła.
Więcej informacji o mongodump
mongodump Narzędzie akceptuje wiele innych przydatnych parametrów, a podczas korzystania z niego w ramach strategii tworzenia kopii zapasowych i odzyskiwania należy wziąć pod uwagę różne czynniki.
Zobacz mongodump dokumentacja na stronie MongoDB, aby uzyskać więcej informacji.
Inne opcje
mongodump i mongorestore są prostymi i wydajnymi narzędziami do tworzenia kopii zapasowych i przywracania małych wdrożeń MongoDB, ale nie są idealne do przechwytywania kopii zapasowych większych systemów.
Zobacz Metody tworzenia kopii zapasowych MongoDB na stronie MongoDB, aby poznać inne metody tworzenia kopii zapasowych baz danych MongoDB.