1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python比较数据库表今天跟前一天数据增量 Python 生产环境Mysql数据库增量备份脚本...

python比较数据库表今天跟前一天数据增量 Python 生产环境Mysql数据库增量备份脚本...

时间:2018-12-22 22:41:46

相关推荐

python比较数据库表今天跟前一天数据增量 Python 生产环境Mysql数据库增量备份脚本...

Mysql数据库常用的办法是通过mysqldump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题。前面写了一遍blog介绍xtrabackup的热备工具。下面的脚本是基于xtrabackup实现自动备份数据库的功能。

需求描述:

每天晚上23点,对数据库进行一次完整备份。第二天0-22点,每小时进行一次增量备份。每次备份前把上次的完整备份和23次增量备份移动到指定目录里,保留7天的数据。

ps:不要问我,为什么是23点执行完整备份,0点不更好处理吗?bingo,这是我们的业务需求,呵呵,不能说太细,你懂得。不要问我,为啥用不用shell,至少不用写subprocess.call来调系统命令。我只能说,我乐意,你管的着?哈哈!

#-*-coding:UTF-8-*-

#!/usr/bin/python

#====================================================

#Author:gaochenchao-EMail:gccmx@

#Lastmodified:-2-5

#Filename:innobackup.py

#Description:backupmysqlfiles,baseperconaxtrabackup

#blog:gccmx.

#====================================================

importdatetime

importsubprocess

importos

importsys

importlogging

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')

backuser='bkuser'

backpass='bk'

basedir='/mnt/backups'

tomorrowdate=datetime.date.fromordinal(datetime.date.today().toordinal()+1).strftime("%y%m%d")

todaydate=datetime.datetime.now().strftime("%y%m%d")

fullback_dir="%s/%s"%(basedir,tomorrowdate)

cuhour=datetime.datetime.now().strftime("%H")

#cuhour=sys.argv[1]

increment_dir='%s/%s'%(basedir,cuhour)

increbase_dir=''

stores='/mnt/stores'

#转储老的备份数据,移动到以当前年月日命名的文件夹内,目录如150209-bak

defstorebefore():

suffix=datetime.datetime.now().strftime("%y%m%d")

storedir="%s/%s-bak"%(stores,suffix)

ifnotos.path.exists(storedir):

subprocess.call("mkdir-p%s"%(storedir),shell=True)

command="cd%s&&mv*%s"%(basedir,storedir)

subprocess.call(command,shell=True)

#删除转储目录中超过7天的备份数据

defcleanstore():

command="find%s-typed-mtime+7|xargsrm-fr"%stores

subprocess.call(command,shell=True)

#备份方法,每天23点完整备份,第二天0-22点增量备份

defbackup():

ifnotos.path.exists(basedir):

subprocess.call("mkdir-p%s"%basedir,shell=True)

commandfull="innobackupex--user=%s--password=%s--no-timestamp%s"%(backuser,backpass,fullback_dir)

ifcuhour=='23':

storebefore()

subprocess.call("rm-fr%s/*"%basedir,shell=True)

subprocess.call(commandfull,shell=True)

logging.info(commandfull)

else:

ifint(cuhour)-1>=0:

increbase_dir='%s/%s'%(basedir,str(int(cuhour)-1))

else:

increbase_dir="%s/%s"%(basedir,todaydate)

ifnotos.path.exists(increbase_dir):

logging.info('上次的增量备份目录[%s]不存在,终止执行'%increbase_dir)

exit(0)

commandincre="innobackupex--user=%s--password=%s--no-timestamp--incremental%s--incremental-basedir=%s"%(

backuser,backpass,increment_dir,increbase_dir)

subprocess.call(commandincre,shell=True)

logging.info(commandincre)

if__name__=='__main__':

backup()

cleanstore()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。