MySQL数据库常用的办法是通过MySQLdump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题。前面写了一遍文章介绍xtrabackup的热备工具,见 http://www.linuxidc.com/Linux/2015-02/113058.htm。下面的脚本是基于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()

MySQL管理之使用XtraBackup进行热备 http://www.linuxidc.com/Linux/2014-04/99671.htm

MySQL开源备份工具Xtrabackup备份部署 http://www.linuxidc.com/Linux/2013-06/85627.htm

MySQL Xtrabackup备份和恢复 http://www.linuxidc.com/Linux/2011-12/50275.htm

用XtraBackup实现MySQL的主从复制快速部署【主不锁表】 http://www.linuxidc.com/Linux/2012-10/71919p2.htm

安装和使用 Percona 推出的 Xtrabackup 备份 MySQL http://www.linuxidc.com/Linux/2011-10/44451.htm

XtraBackup 的详细介绍请点这里
XtraBackup 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-02/113057.htm

Python 生产环境MySQL数据库增量备份脚本的更多相关文章

  1. 生产环境MySQL数据库集群MHA上线实施方案

    生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...

  2. MYSQL数据库增量备份

    MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可.接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法. #fu ...

  3. mysql数据库分库备份脚本

    mysql数据库分库备份脚本 版本1 for dbname in `mysql -uroot -poldboy123 -e "show databases;" |grep -Evi ...

  4. mysql完美增量备份脚本

    是否因为mysql太大,来回备份浪费资源带宽而发愁,如果想解决这个麻烦就需要增量备份. vi /etc/my.cnf开启日志及定期清理日志log-bin=mysql-binbinlog_format= ...

  5. mysql数据库自动备份脚本

    #!/bin/bash #功能说明:本功能用于备份mysql数据库 #编写日期:2018/05/17 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin ...

  6. 生产环境mysql数据库主从恢复从数据库

    故障:系统硬盘损坏,完全重装 故障机器:172.16.100.32 恢复根据的主机器:172.16.100.31 1. 重装完成后,把master主库vs/program目录拷贝过来,然后把数据库的d ...

  7. 企业级mysql数据库完全备份、增量备份脚本

    企业完全备份脚本 [root@client ~]# vim /opt/mysql_bak_wanbei.sh #!/bin/bash #MySQL数据库完全备份脚本 #设置登录变量 MY_USER=& ...

  8. Linux下定时备份MySQL数据库的Shell脚本

    Linux下定时备份MySQL数据库的Shell脚本   对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...

  9. mysql的增量备份与全备的脚本

    mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld]log-bin = "/home/mysql/logbin. ...

随机推荐

  1. Linux下vim查看文件名

    在vim下编辑时,有时候看不到文件名,不知道编辑的是那个文件,怎么呢,可以按照下面的方法试试. 查看文件名 在正常模式下: :f 或CTRL+G 查看文件的路径 用 :!pwd 可以看当前的详细路径. ...

  2. 深入理解Javascript面向对象编程

    深入理解Javascript面向对象编程 阅读目录 一:理解构造函数原型(prototype)机制 二:理解原型域链的概念 三:理解原型继承机制 四:理解使用类继承(继承的更好的方案) 五:建议使用封 ...

  3. 大数据BI积累

    http://blog.csdn.net/wyzxg/article/category/535869 设计论文:http://www.doc88.com/p-3877368345851.html 自动 ...

  4. 2014牡丹江K Known Notation

    Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation ...

  5. wordpress自动清理评论回收站

    有时wordpress的垃圾评论实在让人心烦,杂草难除根,footprint吹又生.如果你有心情的话会一个个把垃圾评论放入回收站,但是时间一长,回收站里的东西越堆越多,你可以点击回收站,然后再点一下e ...

  6. Redis的一些坑

    转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团 ...

  7. Angular.js入门教程

    简单介绍 AngularJS是为了克服HTML在构建应用上的不足而设计的.首先Html是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了. 通常,我们可以通过以下技术来解 ...

  8. FineUI第十五天---表格概述

    Grid表格概述  跟Asp.Net的差不多. 下面介绍一些属性:  ExpandUnusedSpace:此列充满所有的剩余空间,并且随着表格宽度变化而变化 DataToolTipField:用来显示 ...

  9. jQuery对话框插件 ThickBox

    http://baike.haosou.com/doc/7607201-7881296.html 项目已经停止维护,但该插件还是不错的! ThickBox是一个基于JQuery类库的扩展,它能在浏览器 ...

  10. Java设计模式 之 工厂方法模式

    1. 使用设计模式的好处:可提高代码的重复性,让代码更容易被他人理解,保证代码的可靠性. 2. 工厂模式定义:就是创建一个工厂类来创建你需要的类,工厂模式包括工厂模式和抽象工厂模式,抽象工厂模式是工厂 ...