👋 Hello, I am Seung-ho Ham

🧑🏻‍💻 A Developers who create code that changes the world

Database/MongoDB

[MongoDB] MongoDB 백업 및 복원

Potato_H 2024. 9. 6. 17:51
반응형

MongoDB 작업 중, 신중하지 못했던 데이터 작업으로 컬렉션의 모든 데이터를 Delete 함

 

따로 백업을 해놓지 않은 데이터라 복구할 수 없었음

 

데이터 작업에 신중할 필요가 있지만, 무엇보다 안전하게 하기 위해 백업 전략이 필요

 

mongodump로 백업하기

mongodump는 MongoDB 데이터를 BSON(Binary JSON) 포맷으로 덤프하는 툴

 

전체 데이터베이스 백업 (dump)
mongodump --uri="mongodb://localhost:27017" --out=/backup/mongo_$(date +%F)    #저장경로 - 오늘날짜

 

특정 데이터베이스만 백업
mongodump --db=mydb --out=/backup/mongo_$(date +%F)

 

mongorestore로 복원하기

mongodump로 백업한 BSON 파일을 다시 MongoDB에 삽입

 

전체 복원
mongorestore /backup/mongo_2025-00-00/

 

특정 DB만 복원
mongorestore --db=mongoabc_restored /backup/mongo_2025-04-25/mongoabc

 

 

자동 백업 스크립트 예시

mongodump로 백업한 BSON 파일을 다시 MongoDB에 삽입

 

전체 복원
BACKUP_DIR="/var/backups/mongodb"
DATE=$(date +%F)
DB_NAME="aabbcc"

mkdir -p "$BACKUP_DIR"

mongodump --db=$DB_NAME --out="$BACKUP_DIR/mongo_${DATE}"

# 7일 지난 백업 삭제
find "$BACKUP_DIR" -type d -name "mongo_*" -mtime +7 -exec rm -rf {} \;

 

위 스크립트를 /usr/local/bin/mongo_backup.sh 로 저장하고, cron에 등록

crontab -e
0 3 * * * /usr/local/bin/mongo_backup.sh
# 이 내용을 추가하면 매일 새벽 3시 0분에 이 스크립트 실행하라는 뜻
crontab -l    #등록된 작업 확인

백업 파일은 user나 개인정보가 있을 수 있는 경우가 있어서 권한은 700 root:root로 하는 것이 안전함

반응형