MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Utwórz kopię zapasową bazy danych MongoDB za pomocą mongodump

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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pymongo.errors.CursorNotFound:identyfikator kursora '...' niepoprawny na serwerze

  2. Jak mogę posortować, czy wartości null są ostatnio zamówione w mongodb?

  3. Łączenie aplikacji Heroku z usługą Atlas MongoDB Cloud

  4. Jakie są zasady liczby mnogiej Mongoose (Nodejs)?

  5. MongoDB i Robomongo:nie można się połączyć (uwierzytelnianie)