[mongo] 원격 mongoDB 서버 dump하기

김성수·2020년 9월 8일
1

Dump

다른 서버에서 운용하고 있는 mongoDB data를 백업할 때 생겼던 이슈와 그 해결 방법을 적어본다.

remote mongodb dump 명령어는 $ mongodb --help를 통해서도 참고할 수 있다.

$ mongodump -h <db ip:port> -d <db이름> -c <collection이름> --out <dump할 디렉토리> 

에러 1

Failed: error writing data for collection `dumpdb.fs.chunks` to disk: error reading collection: Failed to parse: { find: "fs.chunks", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "dumpdb" }. Unrecognized field 'snapshot'.

mongodump를 실행하는 mongo 서버와, dump할 데이터를 갖고 있는 mongo 서버의 버전이 다르기 때문에 생기는 에러라고 한다.

확인해보니

local에 있는 mongo 버전은 3.6.3

remote mongo 버전은 4.4.0 이었다.


해결 1

이럴 경우, 도커를 이용하여 간단하게 해결할 수 있다.

$ sudo docker run --rm -v ~/<dump받을 local디렉토리>:/<dump받을 container디렉토리> mongo:4.0 mongodump -h <ip:port> -d <db이름> --out <dump받을 container디렉토리>
  1. mongo 버전이 4.0 이상인 일회성 mongoDB 서버 container를 생성한다.
  2. local의 특정 디렉토리와 container의 특정 디렉토리를 볼륨 설정한다.
  3. container내에서 mongodump를 실행한다. dump파일은 볼륨 설정했던 디렉토리에 생성되도록 한다.


에러 2

Failed: error dumping metadata: error creating directory for metadata file /dump: mkdir /dump: permission denied

docker를 실행하면 다음과 같은 에러가 날 수 있다.
볼륨된 local의 디렉토리에 쓰기 권한이 없을 경우다.


해결 2

mkdir -m 777 dump

디렉토리에 권한을 주면 정상적으로 dump가 진행된다.
dump를 하고나면 docker -rm 명령으로 인해 container는 mongodump를 수행한 뒤 바로 삭제된다.
볼륨된 디렉토리에는 dump된 데이터가 생성돼 있다.


Restore

복구는 별거 없이 mongorestore로 하면 버전 차이 따지지 않고 잘 된다.

mongorestore -h <db ip:host> -d <새로 복구되는 db이름>  <dump 디렉토리이름>/<dump한 db이름>

mongorestore -h 127.0.0.1:27017 -d newdb dump/dumbdb

참조 - Mongodump: Unrecognized field 'snapshot'

profile
뿌리가 튼튼한 사람이 되고자 합니다.

0개의 댓글