Kopia zapasowa za pomocą mongoexport czy mongodump?


9

W przypadku kopii zapasowej produkcji MongoDB zaleca mongodump zamiast mongoexport w celu zapewnienia dokładności danych. Musiałbym jednak „wyszorować” dane z bazy danych MongoDB przed utworzeniem kopii zapasowej. Nie znam żadnych opcji oczyszczania danych po stronie serwera innych niż mongoexport . Dwa pytania:

  1. Czy mongoexport ma dostęp do pamięci podręcznej MongoDB w pamięci RAM? Czy zmieniłby działający zestaw w pamięci RAM, tak jak robi to Mongodump ?
  2. Polecenie mongodump ma tę opcję --query . „Udostępnia dokument JSON jako zapytanie, które opcjonalnie ogranicza dokumenty zawarte w danych wyjściowych mongodump.” Czy do wykluczenia niektórych pól w dokumencie potrzeba zapytania?

1
Wygląda na to, że szukasz eksportu, a nie kopii zapasowej. Jeśli eksportujesz tylko podzbiór pól, prawdopodobnie nie będziesz w stanie go przywrócić i mieć w pełni funkcjonalną bazę danych. Istnieje kilka innych opcji do rozważenia: zaszyfruj dowolne pola wrażliwymi danymi (za pomocą kodu aplikacji), abyś mógł wykonać normalną mongodumpkopię zapasową migawki systemu plików lub napisać niestandardowy eksport, jeśli mongoexportnie zrobi tego, czego potrzebujesz. Wszelkie narzędzia lub programy, które odczytują dane, mongodmogą zmienić zestaw roboczy, jeśli dane do wyeksportowania są większe niż dostępna pamięć RAM. Migawki systemu plików są mniej uciążliwe
Stennie

Dzięki za wyjaśnienie. Dobre szyfrowanie na polach to coś, o czym nie myślałem.
Howard Lee

Odpowiedzi:


6

W odpowiedzi na twoje pierwsze pytanie oba narzędzia (domyślnie) przejdą po _idindeksie, aby pobrać dane, a następnie wypiszą je na dysk. Tak, oba narzędzia będą miały podobny wpływ na twój zestaw roboczy, dlatego generalnie zaleciłbym uruchomienie ich przeciwko dodatkowemu (najlepiej ukrytemu dodatkowemu, jeśli to możliwe). W komentarzach powtórzę Stennie i zalecę inne metody tworzenia kopii zapasowych, jeśli masz do czynienia z dużą ilością danych.

W przypadku drugiego pytania zakładam, że szukasz mongodumpekwiwalentu --fieldsopcji od, mongoexportaby zrzucić tylko określone pola. Opcja zapytania mogą być wykorzystywane do Wyszukane, ale to nie może być używany z występem (aby zaznaczyć pola zwrócone) - jest to wniosek, że funkcja jest śledzona w TOOLS-28 , ale nie jest jeszcze zaplanowane. Jak również wspomniał Stennie, drugą opcją jest napisanie niestandardowego eksportera, który będzie pasował do twoich potrzeb (i ponownie, nadal zalecałbym uruchomienie go na dodatkowym, aby chronić zestaw roboczy).


6
  1. (przepraszam, nie wiem)

  2. --query wybierze lub wykluczy całe dokumenty, a nie pola.

Byłoby jednak dobrym pomysłem:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump używa struktury plików bson i zachowuje typy danych . Mongoexport będą tracić typ danych wartości . Na przykład NumberLong („1431677405876”) zostanie przekonwertowany na tylko 1431677405876. Dlatego zaleca się mongodump, jeśli chcesz zaimportować z powrotem do MongoDB.

Dziękujemy za wyjaśnienie dotyczące --query i przykład dotyczący typu danych utraty mongoeksportu.
Howard Lee

0

Mongoexport faktycznie zachowuje typy, ale sprawia, że ​​dane są niespójne. Jeśli eksportujesz pole z Ints i Longs, wyeksportuje je odpowiednio jako obiekty Numbers i JSON, co może utrudnić dalszą drogę.

„Tryb ścisły. Reprezentacje trybu ścisłego dla typów BSON są zgodne z JSON RFC. Każdy parser JSON może analizować te reprezentacje trybu ścisłego jako pary klucz / wartość; jednak tylko wewnętrzny parser JSON MongoDB rozpoznaje informacje o typie przekazywane przez format.”

https://docs.mongodb.com/manual/reference/mongodb-extended-json/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.