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天过期删除

  • 相关阅读:
    LeetCode OJ 112. Path Sum
    LeetCode OJ 226. Invert Binary Tree
    LeetCode OJ 100. Same Tree
    LeetCode OJ 104. Maximum Depth of Binary Tree
    LeetCode OJ 111. Minimum Depth of Binary Tree
    LeetCode OJ 110. Balanced Binary Tree
    apache-jmeter-3.1的简单压力测试使用方法(下载和安装)
    JMeter入门教程
    CentOS6(CentOS7)设置静态IP 并且 能够上网
    分享好文:分享我在阿里8年,是如何一步一步走向架构师的
  • 原文地址:https://www.cnblogs.com/lqn404/p/13800916.html
Copyright © 2011-2022 走看看