基于Python和Xtrbackup的自动化备份与还原实现!

使用Python做备份程序 4.1 问题 编写backup.py脚本,实现以下目标: 需要支持完全和增量备份 周一执行完全备份 其他时间执行增量备份 备份文件需要打包为tar文件并使用gzip格式压缩 4.2 方案 整体框架创建3个函数,分别实现完全备份、增量备份、文件加密3种功能: 1.首先导入time模块,利用if进行判断,如果当地时间是星期一,执行完全备份函数,否则执行增量备份函数,其中,通配符%a代表时间星期几缩写,上传参数分别为要备份的原目录、目标目录、md5字典存放目录 2.调用完全备份函数: a)首先获取新文件名,将新文 阅读详情

 xtrabackup是一个MySQL备份还原的常用工具,实际使用过程应该都是shell或者Python封装的自动化脚本,尤其是备份。

对还原来说,对于基于完整和增量备份的还原,还原差异备份需要指定增量备份等等一系列容易出错的手工操作,以及binlog的还原等,如果纯手工操作的话非常麻烦。

即便是你记性非常好,对xtrabackup非常熟悉,纯手工操作的话,非常容易出错,其实也上网找过,还原没有发现太好用的自动化还原脚本。

Python资源共享群:484031800

于是就自己用Python封装了xtrabackup备份和还原的过程,可以做到自动化备份,基于时间点的自动化还原等等。

需要对xtrabackup有一定的了解,包括流式备份,压缩备份,Xtrabackup还原,mysqlbinlog还原等等。

备份

1,基于xtrabackup的流式压缩备份。

2,周六/或者任意时间的第一次备份为完整备份,其他时间为基于上一次备份的增量备份。

3,将备份开始时间,结束时间,备份路径等信息写入一个日志文件,方便后续自动化还原的时候解析。

效果如下:不管是什么时候,第一次必须为完整备份,然后根据上述规则,继续执行备份的话为基于最新一次备份的增量备份,每备份完成后生成修改备份日志列表信息。

 

 

 

 

 

实现:

# -*- coding: utf-8 -*-

import os

import time

import datetime

import sys

import socket

import shutil

import logging

logging.basicConfig(level=logging.INFO

#handlers={logging.FileHandler(filename='backup_log_info.log', mode='a', encoding='utf-8')}

)

host = "127.0.0.1"

port = "7000"

user = "root"

password = "root"

cnf_file = "/usr/local/mysql57_data/mysql7000/etc/my.cnf"

backup_dir = "/usr/local/backupdata"

backupfilelist = os.path.join(backup_dir,"backupfilelist.log")

backup_keep_days = 15

#获取备份类型,周六进行完备,平时增量备份,如果没有全备,执行完整备份

def get_backup_type():

backup_type = None

if os.path.exists(backupfilelist):

with open(backupfilelist, 'r') as f:

lines = f.readlines()

if(lines):

last_line = lines[-1] #get last backup name

if(last_line):

if(time.localtime().tm_wday==6):

backup_type = "full"

else:

backup_type = "incr"

else:

backup_type = "full"

else:

backup_type = "full"

else:

#full backup when first backup

open(backupfilelist, "a").close()

backup_type = "full"

return backup_type

#获取最后一次备份信息

def get_last_backup():

last_backup = None

if os.path.exists(backupfilelist):

with open(backupfilelist, 'r') as f:

lines = f.readlines()

last_line = lines[-1] # get last backup name

if (last_line):

last_backup = os.path.join(backup_dir, last_line.split("|")[-1])

return last_backup.replace("\n","")

#探测实例端口号

def get_mysqlservice_status():

mysql_stat = 0

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

result = s.connect_ex((host, int(port)))

#port os open

if (result == 0):

mysql_stat = 1

return mysql_stat

#清理过期的历史备份信息

def clean_expired_file():

for backup_name in os.listdir(backup_dir):

if os.path.isdir(backup_name):

bak_datetime = datetime.datetime.strptime(backup_name.replace("_full","").replace("_incr",""), '%Y%m%d%H%M%S')

if(bak_datetime<datetime.datetime.now() - datetime.timedelta(days=backup_keep_days)):

shutil.rmtree(os.path.join(backup_dir, backup_name))

#完整备份

def full_backup(backup_file_name):

os.system("[ ! -d {0}/{1} ] && mkdir -p {0}/{1}".format(backup_dir,backup_file_name))

logfile = os.path.join(backup_dir, "{0}/{1}/backuplog.log".format(backup_dir,backup_file_name))

backup_commond = ''' innobackupex --defaults-file={0} --no-lock {1}/{6} --user={2} --password={3} --host="{4}" --port={5} --tmpdir={1}/{6} --stream=xbstream --compress --compress-threads=8 --parallel=4 --extra-lsndir={1}/{6} > {1}/{6}/{6}.xbstream 2>{7} '''.\

format(cnf_file,backup_dir,user,password,host,port,backup_file_name,logfile)

execute_result = os.system(backup_commond)

return execute_result

#增量备份

def incr_backup(backup_file_name):

os.system("[ ! -d {0}/{1} ] && mkdir -p {0}/{1}".format(backup_dir, backup_file_name))

current_backup_dir = "{0}/{1}".format(backup_dir, backup_file_name)

logfile = os.path.join(backup_dir, "{0}/{1}/backuplog.log".format(backup_dir, backup_file_name))

#增量备份基于上一个增量/完整备份

incremental_bas

使用Python自动备份重要文件:一步一步的教程 在数字化时代,数据是非常宝贵的资源。从个人照片和文档到重要的工作文件,我们的数字资产对我们来说越来越重要。因此,确保这些文件的安全就显得尤为关键。本文将引导您如何使用Python自动备份重要文件,确保您的数据安全。 阅读详情

相关推荐

Python自动备份服务详解及完整源码

代码中使用了os.walk遍历指定的文件夹,对每一个文件使用zipfile.ZipFile进行压缩,最后保存至备份文件名对应的zip文件中。为了提高工作效率和减少人工操作的不便,我们可以通过编写Python脚本来实现自动备份服务。为了实现定时备份的功能,我们可以编写一个主程序,并在其中使用定时函数来调用备份函数。可以根据需要自定义,这里以当前日期作为文件名,备份路径为当前目录。具体来说,就是将需要备份的文件夹压缩成zip格式并保存到备份路径下。然后需要定义需要备份的文件夹路径,这里以当前目录作为示例。

带你成为别人眼中的大佬! 543

pyxtra:xtrabackup 备份还原自动化脚本

pyxtra xtrabackup 备份还原自动化脚本 使用说明: chmod a+x pyxtra.py 使用root用户执行,否则请确保对相关目录有读写执行权限 将备份还原到远程,需开启服务免密登录 需安装 rsync eg: 全量备份 ./pyxtra.py backup --type=base --user=USER --password=PASSWORD 增量备份 ./pyxtra.py backup --type=incr --user=USER --password=PASSWORD 准备备份 ./pyxtra.py prepare --user=USER --password=PASSWORD 还原备份到远程 ./pyxtra.py restore --target_user=USER --target_host=TARGET_HOST 还原备份到本地 ./pyxtra.p

XtraBackup 备份与恢复实例讲解.docx

XtraBackup 备份与恢复实例讲解 这里简单介绍 innobackupex 一些常用的参数

python实现psql数据库备份还原(两种方法)

python实现psql数据库备份还原(两种方法),有详细的说明文档以及操作信息,自己花时间写的,很适合新手查看,每一步都有注释以及说明,谢谢,如有问题,请私信我.

MySQL使用xtrabackup进行备份还原操作

主要为大家详细介绍了MySQL如何使用xtrabackup进行备份还原操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 275

Docker深度详解:从原理到实践的全方位指南

本文深入解析了Docker容器化技术的核心原理与实战应用。主要内容包括:1) Docker核心架构与优势,对比容器与虚拟机的关键差异;2) 企业级部署方案,涵盖离线安装与多镜像源配置;3) 高级镜像构建技术,如参数化构建、缓存优化及安全扫描;4) 容器生命周期管理,包括健康检查、资源限制及数据持久化方案。文章提供了丰富的代码示例和生产级配置建议,如使用Trivy进行安全扫描、精确控制容器资源等技术细节,帮助开发者全面掌握现代容器化技术。

weixin_42593797的博客 1282

Maven

是一款自动化构建工具,专注于Java项目的构建、依赖的管理。

weixin_58738870的博客 2163

BERTopic安装指南:hdbscan依赖问题全解析(附解决方案)

本文详细解析了安装BERTopic时常见的hdbscan依赖报错问题,深入剖析了C++编译环境缺失、Python版本兼容性以及包管理渠道混用三大核心原因。针对Windows、macOS和Linux不同系统,提供了创建虚拟环境、使用conda安装预编译包、安装C++编译工具等具体解决方案,帮助用户顺利安装BERTopic并开始文本主题建模实践。

weixin_29061041的博客 214

MATLAB实战:手把手教你实现WVD信号分析(附完整代码与避坑指南)

本文通过MATLAB实战,手把手教你实现Wigner-Ville分布(WVD)信号分析。文章提供了从零构建WVD函数的完整代码,并重点解析了使用解析信号、处理交叉项、优化计算效率等关键避坑指南,帮助工程师高效处理非平稳信号,获得高分辨率的时频分析结果。

purple的博客 1083

从零构建AI智能体:基于opencode框架的Agent开发全流程指南

AI智能体(AI Agent)作为人工智能领域的重要发展方向,正从概念走向工程实践。其核心原理在于赋予AI自主规划、执行和迭代的能力,使其不再局限于简单的问答,而是能够理解复杂目标、分解任务、调用工具并完成闭环。这一技术价值在于将AI从“对话伙伴”升级为“执行伙伴”,极大地拓展了自动化边界,在智能客服、数据分析、自动化运维等场景展现出巨大潜力。本文聚焦于如何利用opencode这一热门开发框架,快速构建具备实际能力的智能体。通过拆解其核心组件如技能库、规划器与运行时,并结合具体实践案例,系统阐述了从环境搭建

weixin_29055699的博客 439

从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果

通过colmap进行的sfm的普通方式会丢失场景的物理尺度信息,并且并不在符合一般认知的坐标系下,本文将读取colmap生成的点云和相机pose,将其进行空间变换和缩放之后,重新保存,新保存的结果仍然可以被colmap读取以及进行后续的稠密重建以及3dgs等工作

诺有缸的高飞鸟的博客 1425

AgentScope Java 2.0 项目实战: 从零构建自己的个人AI助手“小龙虾“

本文系统介绍如何基于Spring Boot WebFlux、React 18和TypeScript,从零搭建一个本地化的个人AI助手管理平台——AgentScope Paw。项目支持多Agent创建与管理、SSE流式对话、工作区文件CRUD、技能市场、子智能体孵化、AI辅助起草Agent配置等核心功能,并深度集成钉钉、企业微信、飞书、GitHub等IM通道。

program哲学 1430

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: Python3模拟登录并爬取表格数据!做表格的高手也没我厉害!
下一篇: Python基础总结之异常、调试代码第十二天开始!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值