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@163.com

# Last modified: 2015-2-5

# Filename: innobackup.py

# Description: backup mysql files,base percona xtrabackup

# blog:gccmx.blog.51cto.com

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

import datetime

import subprocess

import os

import sys

import logging

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 = 'bk2015'

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

def storebefore():

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

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

if not os.path.exists(storedir):

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

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

subprocess.call(command,shell=True)

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

def cleanstore():

command = "find %s -type d -mtime +7 |xargs rm -fr" % stores

subprocess.call(command,shell=True)

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

def backup():

if not os.path.exists(basedir):

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

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

if cuhour == '23':

storebefore()

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

subprocess.call(commandfull,shell=True)

logging.info(commandfull)

else:

if int(cuhour) - 1 >= 0:

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

else:

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

if not os.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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现DataX的增量抽数,可以编写一个Python脚本来完成。 首先,你可以使用DataX提供的Reader插件来读取增量数据源。DataX已经实现了一些主流的数据源插件,比如MySQL、Oracle、SQLServer等,你可以选择适合你的数据源。 然后,你需要在你的Python脚本中编写逻辑来根据增量字段进行数据抽取。可以使用create_time和update_time字段来取增量数据。你可以通过查询数据库中的最新的create_time和update_time值,然后将这些值作为参数传递给DataX的Reader插件,以仅读取大于这些时间戳的数据。 在你的Python脚本中,你还可以设置定时任务来定期运行,以保证增量数据的持续抽取和同步。 最后,你需要将你的Python脚本与DataX进行集成。你可以在脚本中调用DataX的命令行接口,然后传递参数来执行数据抽取任务。可以使用subprocess模块来调用DataX的命令行工具。 请注意,以上是一种实现增量抽数的方法,具体的实现方式可能因为数据源和需求的不同而有所差异。你需要根据你的具体情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [服务器部署datax+使用Python脚本导数+项目数据](https://blog.csdn.net/qq_43476430/article/details/124121809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值