对之前的脚本进行了调整。
#!/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 "######################################"