利用python实现数据库的备份、压缩并且删除一个月之前的备份数据
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# -*- contact:xupeng.js@gmail.com -*-
# -*- desc:自动备份压缩mysql数据库 -*-
import os,time,sys
databases = ['hk_base']
host = '192.168.1.188'
user = 'xupeng'
pwd = 'xupeng'
port = 3000
dump = '/usr/local/mysql5/bin/mysqldump'
backDir = '/home/xp/mysqlback/' #备份路径
deleteDay = 30 #删除多久之前的备份数据,单位(天)
#删除旧数据
def clear():
if not os.path.isdir(backDir):
return
files = os.listdir(backDir)
oldTime = time.time() - deleteDay*57600
for f in files:
filePath = backDir+f
if os.path.isfile(filePath):
ctime = os.path.getctime(filePath)
if(ctime < oldTime):
try:
os.remove(filePath)
except Exception:
log("删除旧的备份数据异常")
sys.exit()
#数据库备份
def dbDump():
if not os.path.isdir(backDir):
try:
os.makedirs(backDir)
except Exception:
log("创建目录失败")
sys.exit()
backDay = time.strftime("%Y%m%d")
for database in databases:
backName = backDir+database+'.sql'
sql_command = "%s -u%s -p%s -h%s -P%s %s --skip-opt --add-drop-table --create-options -q -e --set-charset --hex-blob --routines --single-transaction --master-data=2 -B > %s"%(dump,user,pwd,host,port,database,backName)
try:
if (os.system(sql_command) == 0):
zipName = backDir+database+'_'+backDay+'.zip'
shell_command = "zip %s %s"%(zipName,backName)
if (os.system(shell_command) == 0):
os.remove(backName)
message = database+"备份压缩成功!"
log(message)
else:
message = database+"备份压缩失败!"
log(message)
else:
message = database+"备份失败!!"
log(message)
sys.exit()
except Exception:
message = database+"备份异常!!"
log(message)
sys.exit()
#记录日志函数
def log(msg):
datenow = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
logstr = '%s : %s \n' %(datenow, msg)
logfile.write(logstr)
if __name__ == '__main__':
logfile = open("/tmp/mysqldump.log", "a")
clear()
dbDump()
logfile.close()