-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbackupANDdump_daily.py
50 lines (39 loc) · 1.41 KB
/
backupANDdump_daily.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import bson
from pymongo import MongoClient
import os
def dump(collections, conn, db_name, path):
"""
MongoDB Dump
:param collections: Database collections name
:param conn: MongoDB client connection
:param db_name: Database name
:param path:
:return:
>>> DB_BACKUP_DIR = '/path/backups/'
>>> conn = MongoClient("mongodb://admin:[email protected]:27017", authSource="admin")
>>> db_name = 'my_db'
>>> collections = ['collection_name', 'collection_name1', 'collection_name2']
>>> dump(collections, conn, db_name, DB_BACKUP_DIR)
"""
db = conn[db_name]
for coll in collections:
with open(os.path.join(path, f'{coll}.bson'), 'wb+') as f:
for doc in db[coll].find():
f.write(bson.BSON.encode(doc))
def restore(path, conn, db_name):
"""
MongoDB Restore
:param path: Database dumped path
:param conn: MongoDB client connection
:param db_name: Database name
:return:
>>> DB_BACKUP_DIR = '/path/backups/'
>>> conn = MongoClient("mongodb://admin:[email protected]:27017", authSource="admin")
>>> db_name = 'my_db'
>>> restore(DB_BACKUP_DIR, conn, db_name)
"""
db = conn[db_name]
for coll in os.listdir(path):
if coll.endswith('.bson'):
with open(os.path.join(path, coll), 'rb+') as f:
db[coll.split('.')[0]].insert_many(bson.decode_all(f.read()))