备份

新建一个脚本/root/backup.py,内容如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
脚本作者:昨夜星辰
脚本作用:配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)
创建日期:2016年9月22日
''' import os
import datetime
import subprocess # MySQL服务root用户的密码
password = 'test' # 用于存放备份的目录
path = '/backup' # 备份周期(单位:天)
cycle = 30 # 获取当天的日期
today = datetime.date.today() # 获取昨天的日期
yesterday = today + datetime.timedelta(days=-1) # 判断备份目录下的文件数是否等于备份周期,如果是就清空备份目录。
if len(os.listdir(path)) == cycle:
os.system('rm -rf %s/*' % path) # 判断备份目录下是否存在以昨天日期命名的目录,如果是就进行增量备份,否则就进行完整备份。
if os.path.isdir('%s/%s' % (path, yesterday)):
cmd = 'innobackupex --password=%s --incremental %s --incremental-basedir=%s/%s --no-timestamp' % (password, path, path, yesterday)
else:
cmd = 'innobackupex --password=%s %s/%s --no-timestamp' % (password, path, today) # 执行备份命令
subprocess.call(cmd, shell=True, stderr=subprocess.PIPE)

读者请注意根据自身实际情况修改脚本中的path、password、cycle变量。

执行下面的命令进入crontab的编辑模式:

crontab -e

新增以下内容:

# 每天凌晨2点自动执行数据库备份脚本
0 2 * * * python /root/python &> /dev/null

还原

# -*- coding: utf-8 -*-
'''
脚本作者:昨夜星辰
脚本作用:使用innobackupex命令还原MySQL服务
创建日期:2016年9月22日
''' import os
import subprocess # 用于存放备份的目录
path1 = '/backup' # MySQL服务的数据目录
path2 = '/wwwroot/mysql' # 获取备份目录下的文件并排序
d_list = sorted(os.listdir(path1)) # 警告信息
alert_message = '''
警告!!!
请检查脚本中的path1、path2变量是否配置正确。
还原操作需要停止MySQL服务并清空数据目录,在生产环境中操作需谨慎!
在硬盘空间足够的前提下,建议重命名数据目录,然后再新建一个同名的数据目录。 比如您的数据目录是/data,那么你可以这么做:
service mysqld stop
mv /data /data_bak
mkdir /data
'''
print alert_message # 询问用户是否继续
while True:
answer = raw_input('准备好后就输入“Y”继续,或者输入“N”退出:')
if answer == 'Y':
break
elif answer == 'N':
exit(0)
else:
print '输入有误,请重新输入!' # 打印日期列表的序号和日期
for i in range(len(d_list)):
print '%d. %s' % (i, d_list[i]) # 询问用户需要还原的日期的序号,如果用户输错了,就提示并要求用户重新输入。
while True:
try:
SN = int(raw_input('请输入你想还原的日期对应的序号:'))
if SN not in range(len(d_list)):
print '输入有误,请重新输入!'
elif not os.path.isdir('%s/%s' % (path1, d_list[SN])):
print '输入有误,请重新输入!'
else:
break
except ValueError:
print '输入有误,请重新输入!' # 停止MySQL服务
os.popen('service mysqld stop') # 清空MySQL服务的数据目录
os.popen('rm -rf %s/*' % path2) print # 如果SN的值为真,那就说明用户选择了增量备份,需要将所有增量备份按顺序合并到完整备份中。
if SN:
print '开始合并所有增量备份到完整备份中...'
for i in range(SN + 1):
print '正在合并%s的数据...' % d_list[i]
if i == 0:
cmd = 'innobackupex --apply-log --redo-only %s/%s' % (path1, d_list[0])
elif i == SN:
cmd = 'innobackupex --apply-log %s/%s --incremental-dir=%s/%s' % (path1, d_list[0], path1, d_list[i])
else:
cmd = 'innobackupex --apply-log --redo-only %s/%s --incremental-dir=%s/%s' % (path1, d_list[0], path1, d_list[i])
subprocess.call(cmd, shell=True, stderr=subprocess.PIPE) print '正在回滚未提交的事务...'
# 回滚未提交的事务
cmd = 'innobackupex --apply-log %s/%s' % (path1, d_list[0])
subprocess.call(cmd, shell=True, stderr=subprocess.PIPE) print '开始还原...'
# 开始还原
cmd = 'innobackupex --copy-back %s/%s' % (path1, d_list[0])
subprocess.call(cmd, shell=True, stderr=subprocess.PIPE) # 变更MySQL数据目录的属主和数组
os.popen('chown -R mysql.mysql %s' % path2) # 启动MySQL服务
os.popen('service mysqld start') print '还原完毕!'

读者请注意根据自身实际情况修改脚本中的path1、path2变量。

配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)的更多相关文章

  1. ​学会用各种姿势备份MySQL数据库

    学会用各种姿势备份MySQL数据库 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复 ...

  2. centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾

    centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾 系统:centos6.5 1.创建脚本目录 mkdir -p /usr/local/sh/ 创建备份web ...

  3. Linux 每天自动备份mysql数据库的方法

    Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载   linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤.   /usr/bin为my ...

  4. 定时自动备份mysql数据库

    新建备份文件并赋予可以执行的权限 mkdir -p /home/mysql_backup/ touch /home/mysql_backup/mysql_backup.sh chmod 551 /ho ...

  5. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  6. 实现定时备份mysql数据库并把备份数据库邮件发送

    一.先来看备份mysql数据库的命令 1 mysqldump -u root --password=root --database abcDataBase > c:/abc_backup.sql ...

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

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

  8. 170208、用Navicat自动备份mysql数据库

    数据库备份很重要,很多服务器经常遭到黑客的恶意攻击,造成数据丢失,如果没有及时备份的话,后果不堪设想. 一:备份的目的: 做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到 ...

  9. 用Navicat自动备份mysql数据库

    以下文章转载自https://blog.csdn.net/u013628152/article/details/54909885,放在自己的博客园以供后面方便查询 —————————————————— ...

随机推荐

  1. cygwin和mingw的区别

    之前由于做一些JNI的开发,安装了MinGW,最近有个项目需要用到cygwin,于是就有个疑问,这两个东西有什么区别?在网上看了些资料,在这里复制粘贴一下,以备后查. Unix下编译通过的C代码,在w ...

  2. asp.net gridview动态添加列,并获取其数据;

    1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...

  3. jquery中ajax在firefox浏览器下“object XMLDocument”返回结果的解决办法

    asp.net中借助jquery的ajax处理功能,使用起来很方便.但是在firefox下获得的data报错object XMLDocument.这是因为默认的情况下把datatype用html来解析 ...

  4. Rails : 产品环境(生产环境)的部署

    bundle install rails server (默认为开发环境) rails server -p80 -e production (指定为生产环境 ,并自定义指定站点端口) rake RAI ...

  5. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  6. 关于Windows2008服务器设置MIME后仍然无法播放MP4的解决方法

    最近遇到了一个非常邪门的故障,重新安装了Windows2008服务器后 Mp4无法正常播放: 整个互联网中关于设置MP4的方法基本都是教你如何在IIS中设置MIME 本文讨论的不是如何教你设置MIME ...

  7. Hadoop总结篇之五---模块间是怎么驱动执行的

    在MRv1中,各个模块间驱动运行的方式是函数调用的方式.这是同步的过程,上一模块调用下一模块函数后,等待其执行.效率不高. 在MRv2中做了改进,yarn基于事件驱动的并发模型.在详细介绍前,先看下图 ...

  8. 黄聪:如何为IIS增加svg和woff等字体格式的MIME

    现在字体图标已经渐渐代替了图片了,移动端用起来也很方便. 使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis的MIME-TYPE来支持图标字体文件 下面就把IIS增加sv ...

  9. deep learning 练习1 线性回归练习

    线性回归练习 跟着Andrew Ng做做练习:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLear ...

  10. about Internet protocol

    <1> SSL版本 测试浏览器支持的SSL版本的网站: https://www.ssllabs.com/ssltest/viewMyClient.html 0xfefd    (DTLS ...