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
'Programming' 카테고리의 다른 글
[Security] HTTP vs HTTPS 차이 (0) | 2022.06.07 |
---|---|
[회고록] 코드스테이츠 블록체인 부트캠프 국비 후기 (Digital Training 과정) (9) | 2022.06.07 |
[Redux] 리덕스 CRUD ! (0) | 2022.06.01 |
[Redux] Redux란? 리덕스 사용법 (0) | 2022.06.01 |
[Database] MongoDB operators list, 연산자 종류 사용법 (0) | 2022.05.31 |
댓글