#!/usr/bin/env python
# encoding: utf-8 #@author: 东哥加油!
#@file: pyinnobackup.py
#@time: 2018/12/11 11:34 import datetime
import os
import pymysql
import subprocess
import re
import sys #从库备份
innobackupex = '/usr/bin/innobackupex'
mysql_user = 'root'
mysql_password = 'mysqlpassword'
defaults_file='/usr/local/mysql/mysql3316.cnf'
mysql_host = '127.0.0.1'
mysql_port = 3316
fullback_dir = '/data/bktest/full'
increback_dir = '/data/bktest/incre'
log_text = '/data/bktest/backup.'+datetime.datetime.now().strftime('%Y%m%d%H%M%S')+'.txt'
logger = open(log_text, 'a+') #环境检查:
def check_env():
print('日志文件:',log_text)
chk_1 = not os.path.exists(innobackupex)
chk_2 = not os.path.exists(fullback_dir)
chk_3 = not os.path.exists(increback_dir)
if chk_1:
logger.write(get_now_time()+':'+innobackupex+'文件不存在'+'\n') if chk_2:
logger.write(get_now_time()+':'+fullback_dir+'全量备份目录不存在'+'\n') if chk_3:
logger.write(get_now_time()+':'+increback_dir+'增量备份目录不存在'+'\n') conn = None
chk_4 = False
try:
conn = pymysql.connect(
host=mysql_host,
port=mysql_port,
user=mysql_user,
passwd=mysql_password,
charset="utf8",
)
except Exception as err:
logger.write(get_now_time()+':'+str(err)+'\n')
chk_4 = True if(chk_1 or chk_2 or chk_3 or chk_4):
#检查命令,目录是否存在,检查Mysql是否可以连接,如果否终止备份程序
print(get_now_time()+':'+'请配置相关环境')
logger.write(get_now_time()+':'+'请配置相关环境'+'\n')
exit() def get_now_time():
str_now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return str_now_time; #执行全量备份
def fullbackup():
full_backup = innobackupex+''' --no-lock --safe-slave-backup --parallel=4 --safe-slave-backup --slave-info --defaults-file=%s --user=%s --password='%s' %s >> %s 2>&1 '''%(defaults_file,mysql_user,mysql_password,fullback_dir,log_text)
logger.write('全量备份使用命令:'+full_backup+'\n')
logger.write('################################全量备份开始################################\n')
logger.write('全量备份开始时间:' + get_now_time() + '\n')
logger.flush()
subprocess.call(full_backup,shell=True)
logger.write("################################全量备份结束################################\n")
logger.write('全量备份结束时间:' + get_now_time()+'\n')
logger.close() #检查备份是否生效
def check_bakcup_success():
file = open(log_text, 'r', encoding='UTF-8')
succ = False
for (num, line) in enumerate(file):
if (re.search(r'innobackupex: completed OK!', line)):
succ = True
file.close()
if succ:
print('备份成功')
else:
print('备份失败')
return succ #执行增量备份,需要检查最近的全量备份
def incre_backup():
fullback_dir='/data/bktest/full'
sonfiles = os.listdir(fullback_dir)
date_strs = []
for i in sonfiles:
child = os.path.join(fullback_dir, i)
if os.path.isdir(child ):
if(re.search(r'[2][0][1-9][0-9]\-[0-1][0-9]\-[0-3][0-9]\_[0-2][0-9]\-[0-5][0-9]\-[0-5][0-9]', str(child))):
date_strs.append(i) if len(date_strs) == 0:
print('没有全量备份')
exit()
date_str = max(date_strs)
incremental_basedir = os.path.join(fullback_dir,date_str)
increback_dir_1 = os.path.join(increback_dir,date_str)
if not os.path.exists(increback_dir_1):
os.makedirs(increback_dir_1)
full_backup = innobackupex+''' --no-lock --safe-slave-backup --parallel=4 --safe-slave-backup --slave-info '''\
'''--defaults-file=%s --user=%s --password='%s' --incremental-basedir=%s --incremental %s >> %s 2>&1 '''%(defaults_file,mysql_user,mysql_password,incremental_basedir,increback_dir_1,log_text)
logger.write('增量备份使用命令:'+full_backup+'\n')
logger.write('################################增量备份开始################################\n')
logger.write('增量备份开始时间:' + get_now_time() + '\n')
logger.flush()
subprocess.call(full_backup,shell=True)
logger.write("################################增量备份结束################################\n")
logger.write('增量备份结束时间:' + get_now_time()+'\n')
logger.close() def del_expire_bk():
print('删除过期备份') if __name__ == '__main__':
if len(sys.argv) == 1:
print('请输入参数 full or incr')
exit() if sys.argv[1] == 'full':
check_env()
fullbackup()
check_bakcup_success()
del_expire_bk()
elif sys.argv[1] == 'incr':
incre_backup()
check_bakcup_success()
del_expire_bk()
else:
print('请输入参数 full or incr')

  

python mysql备份脚本的更多相关文章

  1. Python数据库备份脚本

    Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...

  2. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  3. MySQL 备份脚本--mysqldump在slave 上进行备份

    MySQL 备份脚本--mysqldump在slave 上进行备份 使用mysqldump在slave上进行备份,建议使用stop slave sql_thread,start slave sql_t ...

  4. 自动化运维——MySQL备份脚本(二)

    使用if语句编写MySQL备份脚本 代码: #!/bin/bash #auro backup mysql db #by steve yu #define backup path BAK_DIR=/da ...

  5. 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 ...

  6. jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本

    vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...

  7. CMD mysql 备份脚本

    创建.bat文件 echo. echo MySQL数据库备份脚本 echo ***************************** echo. echo 备份日期:%date% echo 备份时间 ...

  8. MySQL备份脚本,应该这么写

    前言: 数据库备份的重要性不言而喻,特别是在生产环境,任何数据的丢失都可能产生严重的后果.所以,无论什么环境,我们都应该有相应的备份策略来定时备份数据库.在 MySQL 中,比较常用的逻辑备份工具是 ...

  9. mysql备份脚本,每天执行一次全量备份,三次增量备份

    线上一个小业务的mysql备份 全量备份 #!/bin/bash #crete by hexm at -- #scripte name : full_backup.sh #descriptioni : ...

随机推荐

  1. XHTML学习笔记 Part4:列表

    1. 空格 如果在两个单词中间放置几个连续的空格,默认情况下只会显示一个空格,这种情况成为空格折叠.同样,如果在源文档中开始一个新行,或者放置多个连续的空行,则这些新行将被忽略并被处理为一个空格.对制 ...

  2. spark 1.1.0 单机与yarn部署

    环境:ubuntu 14.04, jdk 1.6, scala 2.11.4, spark 1.1.0, hadoop 2.5.1 一 spark 单机模式 部分操作参考:http://www.cnb ...

  3. assembly x86(nasm)画三角形等图形的实现(升级版)

    https://www.cnblogs.com/lanclot-/p/10962702.html接上一篇 本来就有放弃的想法,可是有不愿退而求次, 然后大神室友写了一个集海伦公式计算三角形面积, 三点 ...

  4. 远程kafka通信实例,各种bug解决----虚拟机+本地电脑

    为了实现远程kafka通信,我可谓是呕心沥血.期间各种bug各种调,太煎熬了 (T.T) 介绍: 我用一台虚拟机作为远程消息的发送方,用本地电脑主机作为消息的接收方 虚拟机:安装java,kafka, ...

  5. Git - .gitignore怎么忽略已经被版本控制的文件

    问题 如果某个文件已经存在于远程仓库了,也就是说某个文件已经被版本控制了,如果将该文件添加到.gitignore中,是无法生效的.因为.gitignore是用来控制尚未被纳入版本控制的文件,如果文件已 ...

  6. [模板]manacher

    這麼簡單的算法現在才學...... https://segmentfault.com/a/1190000008484167?utm_source=tag-newest#articleHeader3 h ...

  7. 如何在VirtualBox虚拟机中安装XP系统? 转

    关闭VM (windows 7 )的方法, 使用 退出 保持状态 开启VM (windows 7 )的方法, 选择启动 ######Iissue 1 网络连接不上,可以重新初始化 网络连接. #### ...

  8. 093 Restore IP Addresses 复原IP地址

    给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式.例如:给定 "25525511135",返回 ["255.255.11.135", " ...

  9. 解决java.lang.NoClassDefFoundError: javax/xml/rpc/service错误的方法

    最近在做WebService项目,本地测试没有问题,打算部署到服务器上,但是部署后,访问时出现了如下图1的错误: 图1 图1报的是没有找到定义的类的错误.刷新页面有又出现了另外“新”的错误: 图2 根 ...

  10. 在PaaS上开发Web、移动应用(2)

    在PaaS上开发Web.移动应用(2) PaaS学习笔记目录 PaaS基础学习(1) 在PaaS上开发Web.移动应用(2) PaaS优点与限制(3) 6. 巨型代码,是指持续不断地向一个应用程序添加 ...