복붙노트

[MONGODB] 수정 및 재생 MongoDB를 oplog

MONGODB

수정 및 재생 MongoDB를 oplog

그것은 MongoDB의의 oplog을 수정하고 재생할 수 있습니까?

버그가 일부 데이터를 덮어 쓰기로했는데보다 업데이트가 더 문서에 적용되는 원인. 데이터는 백업에서 복구 및 재 통합, 아무것도 실제로 손실되지 그래서 만, 삭제 또는 잘못된 업데이트를 수정하고이를 재생하는 oplog을 수정할 수있는 방법이 있다면 궁금 하였다.

또한 수용 간주됩니다 "이런 식으로는, 당신이 어떻게 작동하는지 이해하지 못한다"그래서의 라인을 따라 유익한 답변, MongoDB를 내부의 깊이 지식이 없습니다.

해결법

  1. ==============================

    1.응용 프로그램이나 인간의 오류 데이터 손상의 큰 문제 중 하나는 차에 잘못된 기록이 바로 차에 복제 될 것입니다.

    응용 프로그램이나 인간의 오류 데이터 손상의 큰 문제 중 하나는 차에 잘못된 기록이 바로 차에 복제 될 것입니다.

    당신은보다 짧은의 기간 동안 오류나 버그를 발견하면 당신을 도와줍니다 것만 물론 고정 시간 지연 (와 보조 노드 중 하나를 실행하는 옵션 - 이것은 사용자가 "slaveDelay"을 활용하는 이유 중 하나입니다 그 차에 지연).

    경우 당신은 세트 업이없는, 당신은 당신이 그들의 사전 버그의 상태로 복원하는 데 필요한 기록의 상태를 다시 백업에 의존해야합니다.

    데이터의 별도의 독립 실행 형 사본에 모든 작업을 수행 - 단지 모든 것이 제대로 후 생산 시스템에 수정 된 데이터를 이동해야 다시 것을 확인 후.

    무엇하는 것은이 백업의 최근 카피 할 수있을하는 데 필요한 데이터의 X 시간의 가치보다 더 보유해야 클러스터에 oplog (하자의 백업이 X의 오래된 시간 말한다). 복제 세트의 (a)는 모든 구성원이 검사 할 경우에 oplog와 (b)는 당신의 oplog 크기가 다른 노드 구성원에 다른 가능성이 동일한 내용을 가지고 있기 때문에 나는 어떤 노드의 oplog를 지정하지 않은 은 "최대"한.

    그럼 가장 최근의 백업은 52 시간 이전이라고 할 수 있지만, 다행히도 당신은 데이터 (야호)의 75 시간의 가치를 유지하는 oplog 있습니다.

    당신은 이미 (기본 및 보조 노드) 모든 노드가 "나쁜"데이터를 실현, 그래서 당신은 어떻게 할 것인지 새로운 mongod로이 가장 최근의 백업을 복원합니다. 다음 방금 그들이 세컨더리 모든 복제 얻을 것이다 곳에서 현재 주에 이동할 수 있습니다 - 당신은 그들이 바로 잘못된 업데이트하기 전에 무엇인지에이 기록을 복원 할 곳이다.

    백업을 복원하는 동안,이 명령을 통해 oplog 수집의 mongodump를 만들 :

    mongodump 지역 -c oplog.rs -o oplogD -d

    oplog.bson에 이름을 바꾸면 자신의 디렉토리에 oplog 이동 :

    mkdir oplogR
    mv oplogD/local/oplog.rs.bson oplogR/oplog.bson
    

    지금 당신은 "기분을 상하게"작업을 찾아야합니다. 당신은 oplogR에 bsondump 명령을 사용하여, 사람이 읽을 수있는 형태로 oplog을 덤프 할 수 / oplog.bson 파일 (다음과 GREP 사용하거나 "나쁜"업데이트를 찾습니다 무엇-되지 않음). 또는 당신이 사용을 통해 복제 세트의 원래 oplog에 대해 셸에서 로컬 및 db.oplog.rs.find () 명령을 조회 할 수 있습니다.

    당신의 목표는이 항목을 찾을 수와 TS 필드에주의하는 것입니다.

    그것은 다음과 같습니다

    "TS": 타임 스탬프 (1361497305, 2789)

    참고 mongorestore 명령은 두 가지 옵션이 하나라는 --oplogReplay 다른라는 oplogLimit이 있는지 확인합니다. 이제 복원 된 독립형 서버에서이 oplog를 재생하지만이 기분을 상하게 업데이트 작업 전에 중지됩니다.

    이 명령은 (호스트와 포트가 새로 복원 된 백업이 어디있는) 것입니다 :

    2789 oplogR : -h 호스트 -Harbour NNNN --oplogReplay --oplogLimit 1361497305를 mongorestore

    이 타임 스탬프 (1361497305, 2789)를 가치 TS로 진입하기 전에 권리를 정지 oplogR 디렉토리에 oplog.bson 파일에서 각 작업을 복원합니다.

    당신이 확인했으면 그 다음은 실제 차에 적절한 위치에 복원 된 레코드를 기록 (및 복제 전파를 허용 할 수 있습니다 - 당신은 복원을 확인하고 생성 된 정확한 데이터를 재생할 수 있습니다 이유는 별도의 인스턴스에서이 일을 한 것을 기억이다 )는 2 차측 기록을 수정.

  2. from https://stackoverflow.com/questions/15444920/modify-and-replay-mongodb-oplog by cc-by-sa and MIT license