본문 바로가기

project/Expert

[MongoDB] dump하고 backup 하기 - ②(오류 대잔치)

728x90
반응형

이전 포스팅에서는 MongoDB dump 하는 방법을 알아 보았다. MongoDB dump 방법에 대해 궁금한 사람은 아래 링크를 통해 확인해 보길 바랍니다.

ssanggo.tistory.com/54

 

[MongoDB] dump하고 backup 하기 - ①

프로젝트 막바지에 접어들면서 포팅 준비를 하기 위해서 각 팀원별 맡은 바 업무를 진행하기로 하였다. 나는 DB backup 과 restore 를 실행시키기 위한 프로그램을 만드는 것이었다. 우선, MongoDB DB를

ssanggo.tistory.com

쉘 스크립트 사용 방법과 권한설정은 추후 별도 포스팅을 통해 남기도록 하겠다..


결론부터 먼저 말하자면, 특정 DB에서 지속적으로 오류가 발생하여 역시나 쉽게 쉽게 해결되지 않았다.

 

먼저, 내가 시도한 방법들을 아래와 같이 나열해 보겠다..

 

1. DB별 각각 dump를 할 경우에는 전혀 문제가 발생하지 않았다. 그래서 바로 쉘 스크립트로 DB별 dump하는 명령어를 아래와 같이 작성하였다. 하지만, 역시나 DB_7 번에서 오류과 동시에 MongoDB가 꺼져 버렸다. 내 생각에는 결국 쉘 스크립트를 통해서 arr을 통해 실행을 하지만, DB별 명령어가 실행되는 time interval이 짧기 때문에 오류가 발생한다고 생각하였다.

 

#!/bin/bash

arr=("DB_1" "DB_2" "DB_3" "DB_4" "DB_5" "DB_6" "DB_7")

for index in "${arr[@]}"
do
mongodump --db=$index --forceTableScan
done

 

2.  그래서 각 명령어가 실행될 때 충분한 시간을 두어 실행될 수 있도록 코드를 수정하였다. Test 시간은 5s → 10s → 20s 로 Test 하였다. 하지만, 그럼에도 불구하고 DB_7에서 계속해서 오류가 발생하였다.  DB 용량 때문인가 싶어, DB별 용량을 확인해보니, DB_6과 7이 다른 DB에 비해 상대적으로 많은 용량을 차지하고 있음을 알게 되었다. 

#!/bin/bash

arr=("DB_1" "DB_2" "DB_3" "DB_4" "DB_5" "DB_6" "DB_7")

for index in "${arr[@]}"
do
mongodump --db=$index --forceTableScan
sleep 20s # 5s → 10s → 20s
done

 

3. DB_6과 7번을 따로 Time interval을 주도록 코드를 수정하였다. 그럼에도 불구하고,,, 계속해서 DB_7번에서 오류와 함께 MongoDB가 꺼져버렸다..

#!/bin/bash

arr=("DB_1" "DB_2" "DB_3" "DB_4" "DB_5" "DB_6" "DB_7")
col=("collectionName1" "collectionName2" "collectionName3" "collectionName4")

for index in "${arr[@]}"
do
if [ $index = "DB_6" ] || [ $index = "DB_7" ]
then
        for col in "${col[@]}"
        do
        mongodump --db=$index --collection=$col --forceTableScan
        sleep 10s
        done
else
        mongodump --db=$index --forceTableScan
        sleep 5s
fi
done

 

4. 다음으로 확인해 본 내용은 실행될 log와 mongod log 확인을 통해 어떤 문제인지 확인을 해보기로 했다.. 쉘 실행에는 명령어 뒤에 -v 만 추가로 작성하면 된다. 그리고, mongod log는 /var/log/mongodb 에 mongod.log가 있다. 이 부분을 tail -f mongod.log를 통해 실행될 때 로그를 확인하였다. 아래 사진과 같이, WiredTiger error (5) 라는 Error가 발생하는 것을 확인할 수 있었다.

 

5. 구글링을 해보니, EOF의 오류가 발생했을 때, --quiet 옵션을 붙여주면 mongodump를 할때 메모리 사용을 좀 더 줄일수 있다고 하여 시도를 해보았지만, DB_7에서 동일하게 오류가 발생했다..

더보기

[ StackOverflow ]

The Error Failed: error reading from db: EOF is caused from running out of memory during the oplog write out.

You can use less memory as when you run mongodump add the --quiet option.

 


 

 단순히 mongodump 하려고 했는데, 이렇게 많은 오류가 시행착오를 할 줄은 몰랐다... 

728x90
반응형