Mongodb 증분 백업


26

시작점으로 MongoDB 복제 세트에 대한 증분 백업을 설정하는 작업이 제공되었지만 물론 Google 검색에서 MongoDB 문서에서 아무것도 찾을 수 없었지만 Stack Overflow 에서이 질문 을 찾았습니다. Tayra는 매우 활동적이지 않았습니다.

나는 oplog로그를 재생할 무언가를 개발하는 것이 매우 쉽다는 것을 알고 깨달았지만 나도 그렇게 할 필요가 없었 mongorestore습니다.

이제 bash 스크립트를 사용하는 작업 솔루션이 있으며 매우 쉬웠습니다. 논리에 결함이 있거나 미래에 저를 물릴 수있는 부분이 있는지 묻는 이유입니다.

내가 어떻게 구현했는지 아래에서 :

전체 백업 절차

  1. 보조 멤버에 대한 쓰기 잠금 db.fsyncLock()
  2. 스냅 샷 찍기
  3. oplog에서 마지막 위치 기록

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. 쓰기 잠금 해제 db.fsyncUnlock()

증분 백업 절차

  1. 보조 멤버에 대한 쓰기 잠금
  2. 전체 (또는 최신 증분) 백업에서 기록 된 oplog 위치에서 oplog를 덤프하십시오.

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
    
  3. 최신 oplog 위치 기록 (전체 백업과 동일)

  4. 쓰기 잠금 해제

전체 백업 복원 절차

  1. 의 모든 인스턴스를 중지 mongod
  2. 기본이 될 것입니다 상자의 데이터 디렉토리에 스냅 샷 복사를 제외하고 모두 제외 확인 local*하고 mongod.lock 이 복원 기술이라고 거울이 파손 재구성을
  3. 기본 시작
  4. 복제 세트 재구성
  5. 데이터없이 보조를 시작하면 초기 동기화를 수행 할 수 있습니다. 또는 새로운 local데이터베이스 를 사용하여 새 기본 데이터베이스 의 데이터를 복사하십시오.

증분 백업 복원

증분 백업을 만들면 다음과 같이 저장됩니다.

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

우리는 익숙해 oplog.rs.bson졌지만 이름을 바꿔야하므로 다음 단계가 있습니다.

  1. 디렉토리를 백업으로 변경하십시오. cd /mnt/mongo-test_backup/1/local
  2. json 파일을 삭제하십시오. rm *.json
  3. bson 파일의 이름을 바꾸십시오 mv oplog.rs.bson oplog.bson
  4. 그것을 복원하십시오 :

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

나는 모든 스크립트를 가지고 있으며 나중에 GitHub에서 커밋 할 수 있습니다.

문제는 논리에 결함이 있는지 여부입니다. 절차가 매우 간단하고 여전히 문서화 된 곳을 찾을 수 없기 때문에 조금 의심 스럽습니다.


2
어떤 버전의 몽고를 사용하고 있습니까? wiredtiger를 사용하는 경우 db.fsyncLock ()에서 참조한 첫 번째 항목이 문제입니다. MongoDB Inc는 "WiredTiger를 사용하면 잠금 옵션이있는 fsync 명령으로 데이터 파일이 변경되지 않는다고 보장 할 수 없습니다. 결과적으로 백업 작성을 위해 일관성을 유지하기 위해이 방법을 사용하지 마십시오." 링크
SDillon

1
@SDillon은 3.0.4를 사용하지만 WiredTiger를 사용하지는 않습니다. 잠금 쓰기 대신 mongod를 모두 중지해야합니다. 페어 포인트 감사합니다
Tiago

나는 증분 백업에 대한 다음과 같은 도구를 발견 github.com/EqualExperts/Tayra는 이 의지의 도움을 희망
아마드 Abuhasna

1
"버전 3.2으로 변경 : lock 옵션을 사용하는 fsync 명령은 MMAPv1 또는 WiredTiger 스토리지 엔진을 사용하여 MongoDB 인스턴스의 데이터 파일이 변경되지 않도록하여 백업을 작성하기위한 일관성을 제공합니다."
안전성

증분 백업을 수행하는 일반적이고 가장 쉬운 방법은 LVM 및 스냅 샷을 사용하는 것입니다. docs.mongodb.com/manual/tutorial/…
JJussi

답변:


3

귀하의 질문에 대답하십시오. 아니! 당신의 논리에는 실패가 없으며 문제없이 작동해야합니다. 그러나 LVM 스냅 샷을 사용할 수있는 경우 백업을 수행하는 것이 좋습니다.


LVM 스냅 샷의 증분 백업은 어떻게합니까? 감사!
TanisDLJ

LVM 스냅 샷은 기본적으로 증분입니다. 스냅 샷은 순간이며 변경 사항 만 기록됩니다.
JJussi

스냅 샷 만 찍으면 증분됩니다. 그러나 스냅 샷을 아카이브하면 전체 백업입니다. 예를 들어, 이중화와 같이 다른 증분 백업을 아카이브 할 수 없습니다. 또한 증분 백업을 위해 30 분마다 스냅 샷 생성을 시작할 수 없으므로 성능이 크게 저하 될 수 있습니다.
TanisDLJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.