MongoDB 데이터 백업 / 복구 종류
데이터베이스의 백업/복제
- 데이터베이스 솔루션을 사용하는 이유
데이터의 안전한 저장과 값에 대한 일관성을 보장받기 위함 - 하나의 서비스를 진행하다보면 각종 장애 상황을 접하게 됨
- 장애 발생 시 가장 중요하게 필요한 것이 백업과 복구에 관련된 기능
- 기존에 관계형 데이터베이스 솔루션의 경우 테이블별로
사용하는 솔루션에 따라 단순히 데이터가 저장된 파일을 복사하는 것이 가능한 경우가 있음 - NoSQL 솔루션은 한 대 이상의 서버에 데이터가 복제/분산되어 저장될 수 있기에
단순히 파일을 복사하는 것만으로는 데이터 복제와 복구가 쉽지 않음 - MongoDB는 기존 mysql 등과 같은 관계형 데이터베이스와 차이가 있긴 하지만 백업/복구는 유사
- MongoDB는 기본적으로 데이터 덤프를 뜨고 복구하거나 리플리케이션하는 등
다양한 백업/복구 기능을 지원
ShutDown & File Copy
- 가장 기초적인 백업 방법
- MongoDB는 기본적으로 nosql 솔루션이지만 결국 저장된 데이터는 운영체제의 특정 폴더 또는
지정된 폴더에 해당 데이터를 차곡차곡 저장하게 됨 - 이러한 데이터를 찾아내어 운영체제에서 지원하는 복사 명령어인 COPY, CP, UFSDUMP 등
물리적으로 데이터를 복제해내는 방법 - 다만 이렇게 하려면 데이터 파일이 사용중이 아니어야 하기 때문에
서비스 종료, MongoDB 인스턴스를 종료해야 데이터 복제가 가능 - 단점이 있긴 하지만, 가장 원초적이고 쉬운 방법이기 때문에 사용이 필요할 때가 있음
- 복구도 마찬가지로 복사한 파일을 새로운 서버에 다시 복사해 넣는 것으로 간편하게 처리 가능
- 복구 대상의 파일 크기가 굉장히 크거나 개수가 많아 디렉토리를 출력하기 어려울 경우
시간이 많이 소요되고 그 시간또한 예측하기 어려워 필요한 경우에만 사용
FSyncLock & backup
- File Copy는 데이터베이스를 종료하고 실행하는 것
- File Copy에서 데이터베이스를 종료하는 이유는
데이터 복제 중 새로운 데이터가 유입되거나 기존 데이터가 변경/삭제될 경우 무결성에 문제가 생기기 때문 - 이러한 문제를 원천적으로 차단하기 위하여 데이터베이스 인스턴스를 종료하고 물리적으로 격리된 상태에서
파일 복사를 진행하는 것 - FSyncLock를 통해 데이터베이스 전체에 락을걸로 데이터를 복제하는 방법
- FSyncLock을 사용하게 되면 데이터베이스 전체에 락을 걸 수 있어
새로운 데이터의 유입/변경/삭제 를 차단할 수 있어 데이터 무결성의 이슈에서 자유로움 - 이때 MongoDB에서 제공하는 Clone Database 기능을 활용하면
local 서버에 위치한 데이터가 아닌 remote 상의 데이터도 똑같은 데이터베이스 구조로 복제 가능 - 물론 local에서 복사하는 것도 가능한데, 이 때는 copydatabase 명령어 사용
- 이렇게 복제, 복구 등의 원하는 작업이 끝나면 FSyncLock를 unlock 하여야 다시 데이터 입력/수정/삭제가 가능
MongoDump, MongoRestore
- 가장 흔하게 사용하는 백업 방법
- MongoDB 내의 데이터를 컬렉션, 데이터베이스, 전체 데이터 단위로 백업 가능
- 백업되는 데이터는 BSON 형태로 저장되어 문자열 형태로 저장된 데이터보다 빠르게 백업/복구 가능
- 백업된 데이터는 mongorestore 명령어를 통해 복구
MongoExport, MongoImport
- Mongodump, Mongorestore 와의 차이점은
백업 시 데이터 형태를 json, csv, tsv 형태로 백업이 가능하다는 것 - 아무래도 BSON 형태로 백업한 것 보다 속도면에서 느림
- 별도로 이런 툴이 존재하는 이유는 데이터를 마이그레이션할 때 외부 툴의 도움을 받기 위해서
- 이렇게 백업된 데이터는 MongoImport 명령어를 통해 복구 가능
Primay, Secondary & Replica
- Replica : mysql의 리플리케이션에 해당하는 명령어
- Master에서 입력된 쿼리 그대로를 N개 이상의 Slave 서버에 반복 복제하여 입력
- 그렇게 하면 Master서버에 입력된 쿼리가 Slave에도 그대로 복제되기에 Master서버와 데이터 동기화 가능
- 다만 이 방법은 Master서버에서도 쿼리를 통해 데이터를 변경/삭제한 것에 대해서는
Slave도 해당 명령이 그대로 복제되기 때문에,
서비스 운영중에 쿼리 명령어를 통해 유실된 데이터는 복구 어려움
- 리플리케이션 세트
- Master 서버 또는 Slave 서버 중 일부가 물리적인 손상에 의해 사용이 불가능해질 경우,
Master 서버 또는 유실되지 않은 Slave를 통해 다시 데이터를 살려야할 경우 유용 - MongoDB는 만약 Master서버 (=Primary)가 손실을 입었을 경우
Slave서버 (=Secondary)중 투표를 통해 자동으로 Primary 서버를 선정하여 운영됨
- Master 서버 또는 Slave 서버 중 일부가 물리적인 손상에 의해 사용이 불가능해질 경우,
SnapShot 백업
- SnapShot 백업은 MongoDB 내부에서 사용하는 백업 방식
- 사용자의 데이터를 좀 더 안전하게 저장하기 위한 일종의 버퍼
- MongoDB는 빅데이터 솔루션이기 때문에 대량의 insert 트래픽을 견딜 수 있어야 함
- insert 된 데이터는 결국 하드디스크에 저장되게 되는데
이 때, 만약 하드디스크에 문제가 생기면 저장이 불가능하게 됨 - MongoDB 1.6 버정부터는 Journal 시스템 도입
- 데이터가 입력되는 경우 일단 메모리 상의 Journal 시스템에 해당 내용을 저장한 뒤
디스크에 내용을 저장함 - 만약 디스크에 문제가 생길 경우 Journal에 존재하는 데이터를 통해 복구 가능
- MongoDB로 들어온 데이터는 입력/수정/삭제한 데이터 모두 메모리 상의 저널 시스템에
일단 저장되기에 디스크를 사용할 수 없는 상황에서도 신뢰성 확보 가능
MongoDB 데이터 백업 / 복구 방법
FSyncLock & backup
실습 데이터 생성
- > use test
- > for(var i = 1; i <= 20 ; i++ ) db.things.save({x:4, j:i});
- > db.things.find().count();
로컬 상에서 데이터 복사
- > use admin
- > db.copyDatabase("test","test1");
- > show dbs;
- db.copyDatabase(); -> 해당 함수 제거됨
원격지로 데이터 복사
- > db.copyDatabase("test","test","192.168.1.77:27017"); -> 해당 함수 제거됨
- > use test
- > db.things.find().count();
원격지에서 데이터 가져오기
- > db.cloneDatabase("192.168.1.77"); -> 해당 함수 제거됨
MongoDump, MongoRestore
Installation — MongoDB Database Tools
Docs Home → MongoDB Database ToolsThe MongoDB Database Tools are a suite of command-line utilities for working with MongoDB. Follow the guides below to install the Database Tools on your platform:Starting with MongoDB 4.4, the MongoDB Database Tools are
docs.mongodb.com
2. cmd - 해당 경로로 이동
3. mongodump --host 127.0.0.1 --port 27017 --out D:\mongbak -- db test
4. mongorestore --host 127.0.0.1 --port 27017 --db test1 D:\mongbak/test/things.bson
MongoExport, MongoImport
- mongoexport -c things -o D:\mongbak\text.exp
- mongoimport -d test2 -c things --type json --file D:\mongbak\text.exp
'DataBase > MongoDB' 카테고리의 다른 글
MongoDB 개발 팁 살펴보기 ( 튜닝 / 보안 ) (0) | 2021.10.21 |
---|---|
MongoDB 로그 수집 및 분석하기 (0) | 2021.10.21 |
MongoDB 집계 기능 알아보기 (0) | 2021.10.19 |
MapReduce 구현하기 (0) | 2021.10.18 |
MapReduce 실행하기 (0) | 2021.10.18 |