Python 生产环境MySQL数据库增量备份脚本
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数据库增量备份脚本的更多相关文章
- 生产环境MySQL数据库集群MHA上线实施方案
生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...
- MYSQL数据库增量备份
MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可.接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法. #fu ...
- mysql数据库分库备份脚本
mysql数据库分库备份脚本 版本1 for dbname in `mysql -uroot -poldboy123 -e "show databases;" |grep -Evi ...
- mysql完美增量备份脚本
是否因为mysql太大,来回备份浪费资源带宽而发愁,如果想解决这个麻烦就需要增量备份. vi /etc/my.cnf开启日志及定期清理日志log-bin=mysql-binbinlog_format= ...
- mysql数据库自动备份脚本
#!/bin/bash #功能说明:本功能用于备份mysql数据库 #编写日期:2018/05/17 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin ...
- 生产环境mysql数据库主从恢复从数据库
故障:系统硬盘损坏,完全重装 故障机器:172.16.100.32 恢复根据的主机器:172.16.100.31 1. 重装完成后,把master主库vs/program目录拷贝过来,然后把数据库的d ...
- 企业级mysql数据库完全备份、增量备份脚本
企业完全备份脚本 [root@client ~]# vim /opt/mysql_bak_wanbei.sh #!/bin/bash #MySQL数据库完全备份脚本 #设置登录变量 MY_USER=& ...
- Linux下定时备份MySQL数据库的Shell脚本
Linux下定时备份MySQL数据库的Shell脚本 对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...
- mysql的增量备份与全备的脚本
mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld]log-bin = "/home/mysql/logbin. ...
随机推荐
- js jquery, jquery-ui 获取form各种表单input的值?
如何获取? make up (for): 弥补, 补偿, her beaty cannot make up for her stu'pidity. five Basic laws of human s ...
- uname是什么?
uname= unix +name, 是指unix 这个操作系统的 名字, 包括 主机名, 内核版本 架构 平台名称等等
- python 运行时报错误SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2
File "1.py", line 2SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2, but no ...
- R语言演示功能
大家熟知的画图ggplot2包 library(ggplot2) #查看系统自带的qplot的函数演示 example(qplot) #R语言的基本对象 向量.矩阵.数组.数据框.列表 R语言的变量都 ...
- MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍,需要的朋友参考下 MySQL数据库insert和update语句引:用于操作数 ...
- thinkPHP3.2.3集成swoole扩展
swoole.php #!/bin/env php <?php /** * 默认时区定义 */ date_default_timezone_set('Asia/Shanghai'); /** * ...
- CentOS的SSH,Putty配置说明
基本资源: CentOS5.5 (32位) , Mysql6.0 ,Putty ,SSH Step: 1.VMWare中装好CentOS A. 可能存在ifconfig等命令无法正常识别) ...
- 微信将推指纹支付 "指付通"会与Touch ID整合吗
有消息称微信下一版本将推指纹支付“指付通”,解决手机丢失资金安全的问题(这个应该是针对阿里手机支付的弱点),到时候用户绑定的银行卡进行付款时,不用输入密码只需在专门的支付设备(苹果Touch ID ? ...
- C/C++开发者必不可少的15款编译器+IDE
1)Best IDE for C/C++ – kDevelop(http://kdevelop.org/) Kdevelop是一个专为C/C++及其他语言的开源扩展插件IDE.它基于KDevPlat ...
- linux下好用的软件
搜狗输入法 http://pinyin.sogou.com/linux/ wps http://community.wps.cn/download/ 浏览器 chrome or FireFox or ...