Mongodump: „Snapshot” nierozpoznanego pola

33

Korzystam z mongodump z narzędzi mongo, aby pobrać kopię zapasową mojego serwera. Jednak po uruchomieniu polecenia polecenie zwraca „Nierozpoznane pole„ migawka ”.

Pełny błąd to:

Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'.

Mongodump --version zwraca:

mongodump version: built-without-version-string
git version: built-without-git-spec
Go version: go1.7.3
   os: linux
   arch: amd64
   compiler: gc
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

Może być konieczne obniżenie wersji mojej wersji? W przeciwnym razie nie wiesz, dokąd się udać ...

Dave
źródło
1
Jakie są twoje wersje serwera O / S i MongoDB? Twój mongodump --versionwynik sugeruje, że zbudowałeś narzędzia ze źródła, więc nie jest oczywiste, która wersja MongoDB może odpowiadać. Tam, gdzie to możliwe, sugeruję pobranie oficjalnych plików binarnych.
Stennie
1
Mam ten sam problem, myślę, że to dlatego, że korzystam z mongoexport 3.6.4 z serwerem mongoDB 4.0.
Antoine

Odpowiedzi:

13

Z pewnością masz różnicę wersji między mongodump a twoim serwerem mongoDB (3.6 vs 4.0).

Możesz użyć dokera na ratunek:

docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump -h server -d $database --out /workdir/dump/

Dzięki dokerowi możesz używać precyzyjnej wersji narzędzi cli bez jej instalowania.

Możesz nawet podać alias (w .bashrc):

alias mongodump="docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump"

Uwaga: folder, w którym zapisany jest zrzut, musi mieć uprawnienia do zapisu, aby użytkownik mongodb w kontenerze mógł zapisywać na zamontowanym woluminie. Można to osiągnąć ręcznie ustawiając uprawnienia do folderu zrzutu przed uruchomieniem powyższego polecenia.

W powyższym przykładzie, że będzie: mkdir -m 777 dump. Po zakończeniu zrzutu uprawnienia można przywrócić do normalnego (tj sudo chmod 755 dump.).

Antoine
źródło
1
Wciąż pojawia się błąd Failed: error dumping metadata: error creating directory for metadata file dump/{COLLECTION}: mkdir dump: permission denied. Próbowałem z -u 0i -o /tmp/dump, ale nie udało mi się go uruchomić. W końcu skończyłem z uruchomieniem kontenera, uruchomieniem zrzutu, a następnie skopiowaniem go z kontenera. Jakieś pomysły, w których popełniłem błąd w przypadku jednego linera?
Thirdender
1
Musisz odpowiednio ustawić identyfikator UID:docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...
ltn100