python3 自动化备份脚本并上传到备份中心(二)

对之前的脚本进行了调整。



#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Author:xiaojindou
# Date:2020/05/28


import os
import time
import paramiko
import sys
import psutil



#config files
back_dir="/home/backup/full"
log_dir="/home/backup/log"
ticks = time.strftime("%Y%m%d_%H%M")
time_log='full_%s.log'%(ticks)
os.system("mkdir -p %s"%back_dir)
os.system("mkdir -p %s"%log_dir)



###删除历史备份集,本地仅保留1份
def remove_backup():
    res = os.system("find %s -name '*-dbbackup.tar.gz' -exec rm {} \;"%(back_dir))
    if res == 0:
        print '清理任务已完成。'
        return True
    else:
        print '清理任务失败!'
        return False


###检查备份目录的剩余空间
def check_backdir(dir):
    res = psutil.disk_usage(dir)
    if res.percent >= 50:
        print "磁盘空间可能不充足,正在尝试清理..."
        remove_backup()
        if res.percent < 50:
            return True
        else:
            print '空间清理失败,请检查空间清理函数 remove_backup()'
            return False
    else:
        print '备份空间充足。无需清理。'
        return True


###用xtrabackup备份数据库
def my_backup(host,user,password,port,my_cnf):
    ##检查磁盘空间使用情况
    runc = check_backdir('/home')
    if runc:
        print "#######################################"
        print ticks
        print "+++++++++++++开始备份+++++++++++++++++"
        rs = os.system( 'innobackupex --defaults-file=%s --user=%s --password=%s --host=%s --stream=tar --port=%s %s|gzip -> %s/lb-tsp-app65-full-%s-dbbackup.tar.gz' \
            %(my_cnf, user, password, host, port, back_dir, back_dir, ticks))
        if rs == 0:
            print "备份完成,备份成功!"
        else:
            print "备份过程中,遇到问题,备份失败!"
    else:
        print '剩余空间不足,无法启动备份进程,请DBA检查。'
#### 查找最新的文件
def find_file(dir):
    file_lists = os.listdir(dir)
    file_lists.sort(key = lambda fn: os.path.getmtime(dir + '/' + fn) if not os.path.isdir(dir + '/' + fn) else 0, reverse = True)
    print('目录下的所有文件:{}'.format(file_lists))
    for i in file_lists:
        bsfile = os.path.join(dir, i)
        if os.path.isfile(bsfile):
             print('Return file: {}'.format(i))
             return bsfile
             break
        else:
            pass

###把备份文件上传到备份中心 76主机
def upload():
    ##remote host backup center
    hostname = '172.29.0.76'
    port = 60028
    username = 'weihu'
    password = '^6p6qssdsWc'
    local_path = find_file(back_dir)
    remote_path = '/usr/local/server/mongodb/data/backup_center/' + 'from-lb-tsp-app65-full-' + ticks + '-dbbackup.tar.gz'
    if not os.path.isfile(local_path):
        print local_path + " file not exist!!!"
        sys.exit(1)
    try:
        s = paramiko.Transport((hostname, port))
        s.connect(username = username, password = password)
    except Exception as e:
        print e
        sys.exit(1)
    sftp = paramiko.SFTPClient.from_transport(s)
    ##put file to backup center
    sftp.put(local_path, remote_path)
    ###测试是否上传成功
    try:   ###如果成功,远程主机会返回一个对象,否则就抛异常。
        print "即将上传到备份中心的文件: %s " %(local_path)
        sftp.file(remote_path)
        print "上传成功!"
        print "备份中心地址: %s 备份中心目录: %s " %(hostname, remote_path)
    except IOError:
        print "上传失败!"
    finally:
        s.close()


if __name__ == "__main__":
    my_backup('127.0.0.1','root','sdonsdezcdd','13306','/etc/my.cnf')
    upload()
    print "+++++++++++++备份结束+++++++++++++++++"
    print ticks
    print "######################################"




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值