2014-07-07 5 views
5

PyMongo 또는 mongoengine에서 MongoDB의 mongodump에 해당하는 기능이 있습니까? 나는 문서에서 아무것도 찾을 수없는 것 같습니다.몽고 (몽고) 동급 PyMongo/몽고 엔진

사용 사례 원격 mongo 데이터베이스를 주기적으로 백업해야합니다. 로컬 컴퓨터는 mongo가 설치되지 않은 프로덕션 서버이며 관리자 권한이 없으므로 subprocess을 사용하여 mongodump으로 전화 할 수 없습니다. virtualenv에 mongo 클라이언트를 로컬로 설치할 수는 있지만 API 호출을 선호합니다.

고마워요 .--).

+0

Pymongo 따라서 MongoEngine은'mongod' 프로세스에만 연결됩니다. 그러나 문제는 mongodump/restore 등으로 원격 데이터베이스에 연결할 수 있기 때문에 원격 시스템에서 단순히'mongodump '를 실행하는 것일 수 있습니다.'mondodump'를 실행할 기계에서 실행할 필요가없는 DB를 호스팅하고 있습니다. 이해가 되니? – MFB

+0

Meh. 모든 문서를 추출한 다음 BSON 파일을 만드는 것이 더 쉽습니다. 이 게시물을 올리신 덕분에 – Gx1sptDTDa

답변

5

비교적 작고 작은 데이터베이스의 경우 결국 다음 솔루션을 사용했습니다. 크거나 복잡한 데이터베이스에는 적합하지 않지만 제 경우에는 충분합니다. 모든 문서를 json으로 백업 디렉토리에 덤프합니다. 그것은 clunky하지만 pymongo보다 다른 것들에 의존하지 않습니다.

from os.path import join 
import pymongo 
from bson.json_utils import dumps 

def backup_db(backup_db_dir): 
    client = pymongo.MongoClient(host=<host>, port=<port>) 
    database = client[<db_name>] 
    authenticated = database.authenticate(<uname>,<pwd>) 
    assert authenticated, "Could not authenticate to database!" 
    collections = database.collection_names() 
    for i, collection_name in enumerate(collections): 
     col = getattr(database,collections[i]) 
     collection = col.find() 
     jsonpath = collection_name + ".json" 
     jsonpath = join(backup_db_dir, jsonpath) 
     with open(jsonpath, 'wb') as jsonfile: 
      jsonfile.write(dumps(collection)) 
+1

! 이것은 cli'mongodump '와 어떤면에서 다른가요? 결과 json 파일은'mongorestore'에서 사용할 수 있습니까? – Cmag

+1

메모리에있는 모든 문서를 한 번에 보관할 생각이 없다면'col.find()'의 결과를 반복적으로 고려할 수 있습니다. 당신은 "상대적으로 작은 작은 데이터베이스"를 언급합니다. – farthVader

+0

우리는 bson으로 저장할 수 있습니까? – Kishan