Mysql备份脚本python编写
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
##############################################################
#
# Date: 2017/09/22
# Filename: BackupMySQL.py
# Description: backup mysql files,base percona xtrabackup
#
# 备份mysql数据库数据,在主库进行数据同步备份:10.99.10.22
# 备份的数据存储目录: /data/backup/mysqlbak/
# 备份策略是每天备份一次,以当天日期命名的目录,如:20170922
# 保留最近7天的备份数据,可配置
############################################################## # Import required python libraries
import os
import sys
import time
import logging
import datetime
import subprocess logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s] [%(levelname)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='/software/scrpits/backupMysql/backupMysql.log',
filemode='a') # 配置数据库连接信息
DB_HOST = '10.99.10.22'
DB_USER = 'bakuser'
DB_USER_PASS = 'xxxxxxxx' # 配置本地保留多少天的数据备份,默认保留7天
DataSave = 7 # 配置备份的基础目录
BackupPath = '/data/backup/mysqlbak/' DayTime = time.strftime('%Y%m%d')
TodayBackupPath = BackupPath + DayTime def Check():
'''备份前检查,如果目录存在则退出,否则创建备份目录'''
if os.path.exists(TodayBackupPath):
res = 'The backup directory already exists: %s. exit ...' % TodayBackupPath
print res
logging.error(res)
sys.exit()
else:
os.makedirs(TodayBackupPath)
res1 = "creating backup folder %s " % TodayBackupPath
logging.info(res1) def BackupDB():
'''备份数据库,定义备份指令,参数'''
Check() logging.info('Start backing up the database.')
iArgs = "--slave-info --no-timestamp"
BackupCmd = "/usr/bin/innobackupex %s --host=%s --user=%s --password=%s %s " \
% (iArgs, DB_HOST, DB_USER, DB_USER_PASS, TodayBackupPath)
p = subprocess.Popen(BackupCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout,stderr = p.communicate()
logging.info(stdout)
logging.info(stderr)
logging.info('The database backup is complete') def GetTimePoint(days):
''' 返回需要删除的时间点 '''
CurrTime = time.time()
DelTime = 3600*24*int(days)
TimePoint = CurrTime - DelTime
return TimePoint def CheckDir(cdir):
''' 删除文件夹的函数 '''
try:
if os.path.isdir(cdir):
os.rmdir(cdir)
s = 'remove dir %s succ ...' % cdir
logging.info(s)
except Exception as e:
s = 'remove dir %s FAIL !!! %s' % (cdir, e)
logging.error(s) def CleanOld(beforeTime, path):
''' 遍历备份目录,获取目录mtime时间,比对时间戳,删除之前目录 '''
logging.warn('Start cleaning up old backup data...')
for eachdir in os.listdir(path):
f = path + eachdir
lastMtime = os.stat(f).st_mtime
if lastMtime <= beforeTime:
CheckDir(f) if __name__ == '__main__':
BackupDB()
t = GetTimePoint(DataSave)
CleanOld(t, BackupPath)
Mysql备份脚本python编写的更多相关文章
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- 自动化运维——MySQL备份脚本(二)
使用if语句编写MySQL备份脚本 代码: #!/bin/bash #auro backup mysql db #by steve yu #define backup path BAK_DIR=/da ...
- MySQL 备份脚本--mysqldump在slave 上进行备份
MySQL 备份脚本--mysqldump在slave 上进行备份 使用mysqldump在slave上进行备份,建议使用stop slave sql_thread,start slave sql_t ...
- Windows 下 MySQL 备份脚本
@title MySQL备份脚本 @echo off @echo root@127.0.0.1:3306 set host=127.0.0.1 set port=3306 set user=root ...
- jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本
vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...
- CMD mysql 备份脚本
创建.bat文件 echo. echo MySQL数据库备份脚本 echo ***************************** echo. echo 备份日期:%date% echo 备份时间 ...
- MySQL备份脚本,应该这么写
前言: 数据库备份的重要性不言而喻,特别是在生产环境,任何数据的丢失都可能产生严重的后果.所以,无论什么环境,我们都应该有相应的备份策略来定时备份数据库.在 MySQL 中,比较常用的逻辑备份工具是 ...
- mysql备份脚本,每天执行一次全量备份,三次增量备份
线上一个小业务的mysql备份 全量备份 #!/bin/bash #crete by hexm at -- #scripte name : full_backup.sh #descriptioni : ...
- MySQL备份脚本-亲试ok
#!/bin/bash # 以下配置信息请自己修改mysql_user="USER" #MySQL备份用户mysql_password="123456" #My ...
随机推荐
- Android源码及repo下载——亲自测试下载源码成功!
经过一段时间煞费苦心的下载都未能成功后,如今终于把android源代码下载成功,很是兴奋! 废话不多说,直接说下步骤: 1.安装git和curl:sudo apt-get install git-co ...
- Python 字符串拼接、格式化输出、深浅复制
拼接:"+"号(同类型可拼接) >>>li = [1,2] >>>li + li [1,2,1,2] >>>li*2 [1,2 ...
- 解决 ie 返回json提示下载 ResponseEntity方法
js 配合java springMVC后台,成功后返回消息,chrom ff都正常,只有IE提交后返回的JSON提示下载,查看类型 application/json google后发现原来是IE不 ...
- iOS-事件传递和响应机制
转自:http://www.jianshu.com/p/2e074db792ba 前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view ...
- js绑定键盘enter事件
js写法: document.onkeydown = function(event){ var event=document.all?window.event:event; if((event.key ...
- 【python】-- Socket
socket socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递. 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体 ...
- activiti基础--3-----------------------------流程实例
一.流程实例用到的表: select * from act_ru_execution #正在执行的任务表 select * from act_hi_procinst #流程实例的历史表 select ...
- Crontab使用详解
第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...
- 阿里云 rails nginx 配置https访问
1.申请免费型dv ssl证书:https://common-buy.aliyun.com/?spm=a2c4e.11155515.0.0.7zzvOZ&commodityCode=cas#/ ...
- Data Structure Graph: strong connectivity
如果为undirected graph就是dfs或者bfs,如果都能visit则为连通O(V+E). 如果为directed graph就先dfs或者bfs,再reverse direct,再dfs或 ...