zoukankan      html  css  js  c++  java
  • mongo 备份脚本

    import logging
    from datetime import datetime
    from datetime import date, timedelta
    import pymongo
    
    
    """
    备份数据库
    """
    master_host_ip = "192.168.0.147"
    slave_host_ip = "127.0.0.1"
    
    
    class replication_mongodb(object):
        def __init__(self):
            self.master_client = pymongo.MongoClient(host=master_host_ip, port=27017)
    
        def get_master_collection(self):
            databases_list = self.master_client.list_database_names()
            databases_list.remove('config')
            databases_list.remove('admin')
            databases_list.remove('local')
            db_collection_list = []
            for db in databases_list:
                collection_names = self.master_client[db].list_collection_names()
                for collection in collection_names:
                    db_collection_list.append((db, collection))
            return db_collection_list
    
        def master_salve(self, master_db_name, master_collection_name, slave_host, salve_db_name="",
                         salve_collection_name=""):
            if salve_db_name == "":
                salve_db_name = master_db_name
            if salve_collection_name == "":
                salve_collection_name = master_collection_name
            with self.master_client[master_db_name][master_collection_name].find({}, {"_id": 0},
                                                                                 no_cursor_timeout=True) as master_cursor:
                salve_client = pymongo.MongoClient(host=slave_host, port=27017)
                salve_cursor = salve_client[salve_db_name][salve_collection_name]
                salve_cursor.drop()
                salve_cursor.insert_many(list(master_cursor))
    
        def del_expired_db(self, host_ip, db_name):
            del_client = pymongo.MongoClient(host=host_ip, port=27017)
            for collection in del_client[db_name].list_collection_names():
                del_client[db_name][collection].drop()
    
    
    def mongo_main():
        replication = replication_mongodb()
        LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
        DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
        logging.basicConfig(filename='replication_local2.0.log', level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT)
        now_date = datetime.now().strftime("%Y-%m-%d")
        for tup in replication.get_master_collection():
            print(str(tup), "正在备份。。。。")
            salve_db_name = "FWQ_" + now_date + "_0"
            salve_collection_name = tup[0] + "/" + tup[1]
            replication.master_salve(tup[0], tup[1], slave_host_ip, salve_db_name=salve_db_name,
                                     salve_collection_name=salve_collection_name)
            logging.info(str(tup) + "  备份成功")
            print(tup, "----->备份成功")
        expired_time = 7  # 需要删除N天之前的备份
        before_n_days = (date.today() + timedelta(days=-expired_time)).strftime("%Y-%m-%d")
        expired_db_name = "FWQ_" + before_n_days + "_0"
        replication.del_expired_db(slave_host_ip, expired_db_name)
        logging.info(str(expired_db_name) + "  过期数据库删除成功")
        print(expired_db_name, "----->过期数据库删除成功")
    
    
    if __name__ == '__main__':
        mongo_main()

    7天过期删除

  • 相关阅读:
    TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge
    IE8/9 本地预览上传图片
    IT人经济思维之投资
    4、界面前端设计师指南
    IT软件人员的技术学习内容(写给技术迷茫中的你)
    IT从业者的职业道路(从程序员到部门经理)
    jQuery插件库代码分享
    Magical平台类库代码分享
    软件外包的启示
    2、员工的激励与自我激励
  • 原文地址:https://www.cnblogs.com/lqn404/p/13800916.html
Copyright © 2011-2022 走看看