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.