시작점으로 MongoDB 복제 세트에 대한 증분 백업을 설정하는 작업이 제공되었지만 물론 Google 검색에서 MongoDB 문서에서 아무것도 찾을 수 없었지만 Stack Overflow 에서이 질문 을 찾았습니다. Tayra는 매우 활동적이지 않았습니다.
나는 oplog
로그를 재생할 무언가를 개발하는 것이 매우 쉽다는 것을 알고 깨달았지만 나도 그렇게 할 필요가 없었 mongorestore
습니다.
이제 bash 스크립트를 사용하는 작업 솔루션이 있으며 매우 쉬웠습니다. 논리에 결함이 있거나 미래에 저를 물릴 수있는 부분이 있는지 묻는 이유입니다.
내가 어떻게 구현했는지 아래에서 :
전체 백업 절차
- 보조 멤버에 대한 쓰기 잠금
db.fsyncLock()
- 스냅 샷 찍기
oplog에서 마지막 위치 기록
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
쓰기 잠금 해제
db.fsyncUnlock()
증분 백업 절차
- 보조 멤버에 대한 쓰기 잠금
전체 (또는 최신 증분) 백업에서 기록 된 oplog 위치에서 oplog를 덤프하십시오.
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
최신 oplog 위치 기록 (전체 백업과 동일)
- 쓰기 잠금 해제
전체 백업 복원 절차
- 의 모든 인스턴스를 중지
mongod
- 기본이 될 것입니다 상자의 데이터 디렉토리에 스냅 샷 복사를 제외하고 모두 제외 확인
local*
하고mongod.lock
이 복원 기술이라고 거울이 파손 재구성을 - 기본 시작
- 복제 세트 재구성
- 데이터없이 보조를 시작하면 초기 동기화를 수행 할 수 있습니다. 또는 새로운
local
데이터베이스 를 사용하여 새 기본 데이터베이스 의 데이터를 복사하십시오.
증분 백업 복원
증분 백업을 만들면 다음과 같이 저장됩니다.
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
우리는 익숙해 oplog.rs.bson
졌지만 이름을 바꿔야하므로 다음 단계가 있습니다.
- 디렉토리를 백업으로 변경하십시오.
cd /mnt/mongo-test_backup/1/local
- json 파일을 삭제하십시오.
rm *.json
- bson 파일의 이름을 바꾸십시오
mv oplog.rs.bson oplog.bson
그것을 복원하십시오 :
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
나는 모든 스크립트를 가지고 있으며 나중에 GitHub에서 커밋 할 수 있습니다.
문제는 논리에 결함이 있는지 여부입니다. 절차가 매우 간단하고 여전히 문서화 된 곳을 찾을 수 없기 때문에 조금 의심 스럽습니다.
2
어떤 버전의 몽고를 사용하고 있습니까? wiredtiger를 사용하는 경우 db.fsyncLock ()에서 참조한 첫 번째 항목이 문제입니다. MongoDB Inc는 "WiredTiger를 사용하면 잠금 옵션이있는 fsync 명령으로 데이터 파일이 변경되지 않는다고 보장 할 수 없습니다. 결과적으로 백업 작성을 위해 일관성을 유지하기 위해이 방법을 사용하지 마십시오." 링크
—
SDillon
@SDillon은 3.0.4를 사용하지만 WiredTiger를 사용하지는 않습니다. 잠금 쓰기 대신 mongod를 모두 중지해야합니다. 페어 포인트 감사합니다
—
Tiago
나는 증분 백업에 대한 다음과 같은 도구를 발견 github.com/EqualExperts/Tayra는 이 의지의 도움을 희망
—
아마드 Abuhasna
"버전 3.2으로 변경 : lock 옵션을 사용하는 fsync 명령은 MMAPv1 또는 WiredTiger 스토리지 엔진을 사용하여 MongoDB 인스턴스의 데이터 파일이 변경되지 않도록하여 백업을 작성하기위한 일관성을 제공합니다."
—
안전성
증분 백업을 수행하는 일반적이고 가장 쉬운 방법은 LVM 및 스냅 샷을 사용하는 것입니다. docs.mongodb.com/manual/tutorial/…
—
JJussi