MongoDB 백업 및 복원 방법

MongoDB 백업 및 복원은 mongodumpmongorestore 명령어로 할 수 있습니다. 전반적으로 mysql 백업 및 복원 방법과 유사합니다. 몽고DB에선 데이터베이스를 bson과 json 형태의 백업 파일로 저장하고 이를 이용해서 복원합니다. 리눅스에 설치된 몽고DB를 기준으로 백업 후 복원하는 테스트를 해보겠습니다.

MongoDB 백업 및 복원

MongoDB에서는 데이터베이스에 값을 저장하는 테이블을 컬렉션(Collection)이라고 부릅니다. 그리고 컬렉션에 저장되는 데이터를 도큐먼트(document)라고 합니다. 컬렉션은 관계형 데이터베이스(RDBMS)로치면 테이블, 도큐먼트는 행입니다.

 

저는 testdb라는 데이터베이스에 testcollection이라는 이름의 컬렉션을 가지고 백업 작업을 진행해 보겠습니다. testcollection에 저장된 도큐먼트를 아래의 메서드로 확인해 보겠습니다. 4개의 샘플 도큐먼트가 저장되어 있는 게 확인됩니다.

db.testcollection.find().pretty()

 

몽고db 컬렉션 도큐먼트

 

1. 데이터베이스 백업

이제 이 데이터베이스를 mongodump 명령을 이용해 백업하겠습니다. 참고로 mongodump는 설치된 몽고db의 bin 경로에 있습니다. 해당 경로는 환경변수에 등록되어 있기 때문에 위치에 상관없이 명령어를 쓸 수 있습니다.

 

[모든 데이터베이스 백업]

아래와 같은 형태로 사용하면 모든 데이터베이스가 백업됩니다.

mongodump --out [백업경로]

 

[일부 데이터베이스만 백업]

testdb라는 데이터베이스만 백업하면 아래와 같이 사용합니다.

mongodump --db testdb --out [백업경로]

 

저는 모든 데이터베이스를 백업하는 방법으로 진행하겠습니다. 백업 경로는 /mongoData/backup로 지정했습니다.

[root@localhost mongoData]# mongodump --out /mongoData/backup
2023-05-26T06:05:30.849-0700    writing admin.system.version to /mongoData/backup/admin/system.version.bson
2023-05-26T06:05:31.018-0700    done dumping admin.system.version (1 document)
2023-05-26T06:05:31.043-0700    writing testdb.testcollection to /mongoData/backup/testdb/testcollection.bson
2023-05-26T06:05:31.044-0700    done dumping testdb.testcollection (4 documents)
[root@localhost mongoData]#

 

완료 후에 백업이 생성된 경로를 가보면 성공적으로 백업본이 생성된 걸 볼 수 있습니다. 몽고db는 데이터를 BSON(Binary JSON) 형식으로 백업을 저장합니다. 참고로 BSON은 JSON을 바이너리 형태로 저장하면서 몽고db를 사용할 땐 마치 JSON 형식을 다루는 것처럼 보여줍니다.

[root@localhost admin]# ls
system.version.bson  system.version.metadata.json

 

백업 파일에 admin 디렉토리가 확인되는데, 여기가 몽고db의 사용자 정보를 저장하는 데이터베이스입니다. mysql로 치면 mysql DB의 user 테이블 같은 개념입니다. testdb라는 데이터베이스도 백업된 것이 확인됩니다.

 

백업 성공

 

2. 데이터 삭제

복원을 테스트를 위해 컬렉션에 저장된 도큐먼트를 삭제하겠습니다.

use testdb
db.dropDatabase()
db.testcollection.find().pretty()

 

도큐먼트 삭제

 

3. 데이터베이스 복원

복원 시에는 mongorestore 명령을 사용합니다.

mongorestore [백업본 경로]
[root@localhost backup]# mongorestore /mongoData/backup
2023-05-26T06:08:57.628-0700    preparing collections to restore from
2023-05-26T06:08:57.629-0700    reading metadata for testdb.testcollection from /mongoData/backup/testdb/testcollection.metadata.json
2023-05-26T06:08:57.951-0700    restoring testdb.testcollection from /mongoData/backup/testdb/testcollection.bson
2023-05-26T06:08:58.017-0700    finished restoring testdb.testcollection (4 documents, 0 failures)
2023-05-26T06:08:58.017-0700    no indexes to restore for collection testdb.testcollection
2023-05-26T06:08:58.017-0700    4 document(s) restored successfully. 0 document(s) failed to restore.

 

복원 완료 후 다시 testcollection 컬렉션을 조회해 보니 기존처럼 도큐먼트가 정상적으로 복원됐습니다.

> db.testcollection.find().pretty()
{
        "_id" : ObjectId("6470a3fd00003780cf068c7b"),
        "name" : "John Doe",
        "age" : 30
}
{
        "_id" : ObjectId("6470a43f00003780cf068c7c"),
        "name" : "Jane Doe",
        "age" : 28
}
{
        "_id" : ObjectId("6470a43f00003780cf068c7d"),
        "name" : "Bob Smith",
        "age" : 35
}
{
        "_id" : ObjectId("6470a43f00003780cf068c7e"),
        "name" : "Charlie Brown",
        "age" : 40
}

 

이런 방식으로 몽고db 데이터베이스 백업 및 복원을 할 수 있습니다. 만약 몽고db 서버를 다른 장비로 이관해야 하는 경우에도 데이터를 백업한 뒤 다른 서버에 복원하는 방식을 사용하시면 됩니다.

반응형

댓글

Designed by JB FACTORY