zoukankan      html  css  js  c++  java
  • Mysql备份脚本python编写

    #!/usr/bin/env python
    #-*- coding: UTF-8 -*- 
    ##############################################################
    #
    # Date: 2017/09/22 
    # Filename: BackupMySQL.py
    # Description: backup mysql files,base percona xtrabackup
    #
    # 备份mysql数据库数据,在主库进行数据同步备份:10.99.10.22
    # 备份的数据存储目录: /data/backup/mysqlbak/
    # 备份策略是每天备份一次,以当天日期命名的目录,如:20170922
    # 保留最近7天的备份数据,可配置
    ##############################################################
    
    
    # Import required python libraries
    import os 
    import sys 
    import time
    import logging 
    import datetime 
    import subprocess 
    
    logging.basicConfig(level=logging.DEBUG, 
                    format='[%(asctime)s]  [%(levelname)s] %(message)s', 
                    datefmt='%Y-%m-%d %H:%M:%S', 
                    filename='/software/scrpits/backupMysql/backupMysql.log', 
                    filemode='a') 
    
    # 配置数据库连接信息
    DB_HOST = '10.99.10.22'
    DB_USER = 'bakuser'
    DB_USER_PASS = 'xxxxxxxx'
    
    # 配置本地保留多少天的数据备份,默认保留7天
    DataSave = 7
    
    # 配置备份的基础目录
    BackupPath = '/data/backup/mysqlbak/'
    
    DayTime = time.strftime('%Y%m%d')
    TodayBackupPath =  BackupPath + DayTime
    
    
    def Check():
        '''备份前检查,如果目录存在则退出,否则创建备份目录'''
        if os.path.exists(TodayBackupPath):
            res = 'The backup directory already exists: %s. exit ...' % TodayBackupPath
            print res
            logging.error(res)
            sys.exit()
        else:
            os.makedirs(TodayBackupPath)
            res1 = "creating backup folder %s " % TodayBackupPath
            logging.info(res1)
    
    
    def BackupDB():
        '''备份数据库,定义备份指令,参数'''
        Check()
    
        logging.info('Start backing up the database.')
        iArgs = "--slave-info  --no-timestamp"
        BackupCmd = "/usr/bin/innobackupex %s --host=%s  --user=%s --password=%s %s "  
                       %  (iArgs, DB_HOST, DB_USER, DB_USER_PASS, TodayBackupPath) 
        p = subprocess.Popen(BackupCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        stdout,stderr = p.communicate()
        logging.info(stdout)
        logging.info(stderr)
        logging.info('The database backup is complete')
    
    def GetTimePoint(days):
        ''' 返回需要删除的时间点 '''
        CurrTime = time.time()
        DelTime = 3600*24*int(days)
        TimePoint = CurrTime - DelTime
        return TimePoint
    
    
    def CheckDir(cdir):
        ''' 删除文件夹的函数 '''
        try:
            if os.path.isdir(cdir):
                os.rmdir(cdir)
                s = 'remove dir %s succ ...' % cdir
                logging.info(s)
        except Exception as e:
            s = 'remove dir %s FAIL !!! %s' % (cdir, e)
            logging.error(s)
        
    
    def CleanOld(beforeTime, path):
        ''' 遍历备份目录,获取目录mtime时间,比对时间戳,删除之前目录 '''
        logging.warn('Start cleaning up old backup data...')
        for eachdir in os.listdir(path):
            f = path + eachdir
            lastMtime = os.stat(f).st_mtime
            if lastMtime <= beforeTime:
                CheckDir(f)            
        
    if __name__ == '__main__': 
        BackupDB()    
        t = GetTimePoint(DataSave)
        CleanOld(t, BackupPath) 
    

      

  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/topicjie/p/7576329.html
Copyright © 2011-2022 走看看