#!/usr/local/bin/python3#-*- coding: UTF-8 -*-
#====================================================#Author: changbo - [email protected]#Last modified: 2017-9-3#Filename: mysqlincrement.py#Description: backup mysql files,base percona xtrabackup#http://www.cnblogs.com/changbo#====================================================
importtimeimportdatetimeimportosimportsubprocessimportlogging
logging.basicConfig(level=logging.DEBUG,
format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
datefmt=‘%a, %d %b %Y %H:%M:%S‘,
filename=‘backup.log‘,
filemode=‘a‘)
nowday= time.strftime("%Y%m%d", time.localtime())
nowtime= time.strftime("%H%M", time.localtime())
basedir= mysqlbakdir= perfectdir= incremdir= childdir= #获取昨日备份文件目录
defgetYesterday():
today=datetime.date.today()
oneday= datetime.timedelta(days=1)
yesterday= str((today - oneday)).replace(‘-‘, ‘‘)returnyesterdaydefcreateDir():#创建备份根目录
if notos.path.exists(basedir):
os.mkdir(basedir)#创建日备份目录
if notos.path.exists(mysqlbakdir):
os.mkdir(mysqlbakdir)#创建全备目录并执行全备
if notos.path.exists(perfectdir):
os.mkdir(perfectdir)
command1= ‘innobackupex --defaults-file=xxxxx --no-timestamp %s‘ %perfectdir
os.system(command1)#创建增备目录
if notos.path.exists(incremdir):
os.mkdir(incremdir)#创建分备份目录并增备
if notos.path.exists(childdir):
os.mkdir(childdir)
command2= ‘innobackupex --defaults-file=xxxxx --no-timestamp --incremental-basedir=%s --incremental %s‘ %(
perfectdir, childdir)
os.system(command2)defincremBak():#获取最后被创建的文件夹目录名
filename = (subprocess.Popen("ls" + incremdir + "| head -2 | tail -1 | awk ‘{print $9}‘", shell=True,
stdout=subprocess.PIPE).stdout.read()).decode()#创建增备目录
os.mkdir(childdir)
command3= ‘innobackupex --defaults-file=xxxxx --no-timestamp --incremental-basedir=%s/%s --incremental %s‘ %(
incremdir, filename, childdir)
os.system(command3)defmvBak():
filetime=getYesterday()#压缩昨天备份目录
command4 = "cd %s && tar czf hkmysqlbak%s.tar.gz %s" %(basedir, filetime, filetime)
logging.debug(os.system(command4))#移除昨天备份目录
command5 = "cd %s && rm -rf %s" %(basedir, filetime)
logging.debug(os.system(command5))if __name__ == ‘__main__‘:if notos.path.exists(mysqlbakdir):
createDir()
incremBak()