MongoDB 운영방법 - 백업/복구
1. MongoDB 데이터 백업/복구 종류
* 데이터 베이스의 백업/복제
: 데이터의 안전한 저장과 값에 대한 일관성 보장
: 장애 발생시 가장 중요하게 필요한 것이 백업과, 복구
: NoSQL특성상 분산되기 때문에 단순히 파일을 복사하는 것만으로는 데이터 복제와 복구가 싶지 않음
: MongoDB는 다양한 백업/복구 기능을 지원
* ShutDown & File copy
: 가장 기초적인 백업 방법
: 간단하긴하지만, I/O를 막아 무결성을 지키기 위해 mongoDB를 끄고 해야하는 단점이 존재
: 새로운 서버에 복사 붙여넣기만 하는 것으로 간단하게 처리 가능
: 너무 용량이 큰 경우 시간이 많이 소요되므로 필요한 경우만 사용.
* FSyncLock & Backup
: 데이터 베이스 전체에 락을 걸고 데이터를 복사하는 방법
: 무결성 이슈에서 자유로움
: 복제, 복구 등 작업이 끝나면 unlock을 해야함.
* MongoDump, MongoRestore
: 가장 흔하게 사용하는 방법
: 컬렉션, DB, 전체 데이터 단위로 백업 가능
: BSON형태로 저장되며, 더 빠르게 백업과 복구가능
: 백업된 데이터는 mongorestore 명령어를 통해 복구 가능
* MongoExport, MongoImport
: Mongodump, MongoRestore와의 차이는, 데이터를 json, csv, TSV형태로 백업이 가능하다.
: BSON보다 느리며 텍스트 형태로 저장
: 데이터를 마이그레이션할 때 외부 툴을 사용할 수 있다.
: MongoImport 명령어로 복구 가능
* Primary, Secondary & Replica
- Replica : MySQL의 리플리케이션에 해당하는 명령어
: Master-Slave를 동기화 하기 때문에 Main서버와 동일한 데이터 유지가능
: 쿼리를 통해 변경/삭제한 것은 복구가 어려움.
- 리플리케이션 세트
: Master-Slave를 통해 자동으로 Main서버가 고장났을 때 Slave서버를 Master로 올려 안정성을 확보한다.
* SnapShot 백업
: 사용자의 데이터를 더 안전하게 보관하기 위한 일종의 버퍼
: 대량의 Insert트래픽을 견딜 수 있어야함.
: 1.6v 부터 Journal 시스템 도입
: 데이터 입력시 메모리상의 Journal 시스템에 해당 내용을 저장한뒤 디스크에 내용을 저장함
: 디스크에 문제가 생긴 경우, Journal에 존재하는 데이터를 통해 복구가 가능
2. MongoDB 데이터 백업/복구 방법
* FSyncLock & Backup
: 실습 데이터 생성
> 실습 데이터 생성하기
: 로컬상에서 데이터 복사
> use admin
> db.copyDatabase("DB명","복사된DB명") // ""안에 쓰기
> show dbs
: 원격지로 데이터 복사
> db.copyDatabase("DB명","복사될DB명","192.168.1.77:27017")
: 원격지에서 데이터 가져오기
> db.cloneDatabase("192.168.1.77");
* MongoDump, MongoRestore
: MongoDump (mongo shell 밖에서 실행)
> mongodump --host 127.0.0.1 // 현재 실행되어 있는 DB의 내용을 BSON형태로 백업하겠다.
: MongoRestore (mongo shell 밖에서 실행)
> mongorestore -h 127.0.0.1 ./dump/ // 해당 폴더로 해당 데이터를 복구 시켜준다.
* MongoExport, MongoImport
: MongoExport
> mongoexport -h 192.168.1.77 -c 콜랙션명 -d DB명 -o "경로/test.exp" // 해당 호스트에서 돌아가고있는 DB의 Collection을 test.exp로 백업하겠다.
: MongoImport
> mongoimport -d test -c things --type json --file "경로" // 해당 경로의 백업파일을 현재 돌아가고 있는 DB의 DB의 컬랙션에 복구한다.