본문 바로가기
Programming

[MongoDB] mongoexport / mongoimport / mongodump / mongorestore 사용법

by 개발자 염상진 2022. 6. 3.

 

MongoDB로 관리중인 데이터를 내보내거나 불러와야 하는 경우가 있다. 백업을 위해서 현재 데이터베이스를 JSON 혹은 BSON으로 저장해놓거나, 서버를 이전하는 경우 마이그레이션 과정에서 데이터를 가져와야 하는 경우가 있다. DB파일을 한번에 불러들여와 적용시킬 수 있다. 이 때 사용하는 명령어가 mongoimport / mongoexport다.

 

mongoexport

 

현재 작업중인 데이터베이스를 파일형태로 외부에 내보내는 명령어다. 대량의 데이터를 내보낼 수 있기 때문에 백업 용도로 많이 사용된다. 기본적인 명령어는 다음과 같다. MongoDB에서는 기본 포트를 27017번을 사용한다. 마치 PostgreSQL에서 5432번을 디폴트로 사용하는 것과 같다. 파일은 굳이 JSON으로 보내지 않더라도 BSON을 사용해서 바이너리 형태로 백업하는게 좋다.(용량이 더 작음)

 

mongoexport -d databaseName -c collectionName --jsonArray -o myfile.json --port 27017

 

  • -d || --database : 데이터베이스 이름
  • -c || --collection : Collection 이름
  • -o || --output : 저장할 파일 이름
  • --port : 포트 번호
  • --jsonArray 배열 형태로 반환하는 경우, JSON 파일을 다른 디렉토리에서 열었을 때 EOF등 닫는 표기가 없어 오류가 나는 경우가 많다. 이 때 배열 형태로 반환하면 문제를 해결할 수 있다. 즉 데이터 시작과 끝 부분에 [] 기호가 붙으면서 외부 어플리케이션에서 open 했을 때 에러가 나지 않는다.
  • -f : 원하는 필드만 저장하는 경우 사용

 

mongoimport

 

외부 파일을 현재 데이터베이스에 가져올 때 사용한다. import 할 파일을 --file 옵션으로 명시해주면 된다.

 

mongoimport -d databaseName -c collectionName --file myFile.json --jsonArray --port 27017

 

만약 현재 데이터베이스에 동일한 이름의 Collection이 존재하는 경우 drop 옵션을 사용한다. drop을 사용하면 기존 Collection 값들을 무시하고 새롭게 데이터를 변경하게 된다. 

mongoimport -d databaseName -c collectionName --drop --file myFile.json

 

 

Error Handling

 

MongoDB에서 import/export명령어를 사용하는 경우 다음과 같은 에러를 만날 수 있다. 이런 에러들이 발생하는 이유는 Authentication이 되질 않았기 때문이다. 인증이 필요한 경우 위의 명령문에 인증관련 옵션들을 추가해줘야 한다. 가장 쉬운 방법은 /etc/mongod.conf에서 security를 disabled하는 것이지만, 근본적인 해결책은 아니다.

 

Failed: (Unauthorized) command listCollections requires authentication
error connecting to host: could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.

 

 

import / export 시 계정 인증이 필요한 경우 아래와 같이 명령문을 작성한다. password에 따옴표는 붙여도되고 안붙여도 된다.

mongoimport -u username -p password -d databaseName -c collectionName --drop --file myFile.json --port 27017 --authenticationDatabase admin
mongoexport -u username -p 'password' -d databaseName -c collectionName --out myfile.json --port 27017 --authenticationDatabase admin

 

 

mongodump

 

데이터베이스의 대용량 데이터를 외부 파일로 저장하는 명령어다. 추가 옵션이 없는 기본 명령어에서는 전체 데이터를 내보내게 된다. 만약 ip가 111.111.111.111의 myDatabase를 내보낸다고 하면 아래 명령어를 사용한다.

 

mongodump --host 111.111.111.111 --port 27017 --db myDatabase --out myFilename

mongodump --uri mongodb://111.111.111.111:27017 --db myDatabase --out myFilename

mongodump --uri mongodb://111.111.111.111:27017 --db myDatabase --archive=myFilename

 

mongodump Options

  • --uri : uri 정보
  • --db : 데이터베이스 이름
  • --collection : Collection 이름
  • --port : 포트번호
  • --out : 저장할 파일의 이름 및 저장 경로 / BSON 형태로 파일을 저장한다.
  • --host : host 정보
  • --archive : gzip 형태로 파일을 내보낸다.

 

mongorestore

 

대량의 데이터를 파일에서 데이터베이스로 다시 불러들여 올 수 있다.

 

mongorestore --db Database Filename

mongorestore --db Database --port 27017 Filename

mongorestore --gzip --db Database --archive=Filename.gz

 

 

 

Reference

 

 

 

 

[Database] MongoDB operators list, 연산자 종류 사용법

비교 연산자 비교 연산자는 지정한 값을 비교하는 연산자다. { : { : }} $eq(Equal to): $gt(Greater Than) $gte(Greator Than or Equal to) $ne(Not Equal to) $lt(Less Than) $lte(Less Than or Equal to) $gte..

about-tech.tistory.com

 

 

[Database] MongoDB CRUD !

Create MongoDB의 모든 Document들은 고유한 값인 "_id"를 가진다. _id 필드 값은 Document를 구별한 역할을 수행한다. Document 내부의 필드 값이 동일한 경우에도 _id 값이 다를 경우 서로 다른 Document가 된..

about-tech.tistory.com

 

 

[Database] MongoDB란? NoSQL, 도큐먼트 데이터베이스, cluster replica set Instance

MongoDB란? MongoDB는 대표적인 NoSQL Document 데이터베이스다. 테이블 단위로 저장하는 SQL 기반 관계형 데이터베이스와는 다르게 문서처럼 데이터를 저장 및 관리한다. 일반적으로 Document 데이터베이

about-tech.tistory.com

 

댓글