mysqldump + python 定时备份数据库

场景:

   需要对mysql进行定时备份,受限于硬盘空间的大小,需要对备份的数据需要定时清理

在这里插入图片描述

python代码实现:

# -*- coding:UTF-8 -*-
"""@ProjectName  : HotelGo2DelonixPmx@FileName     : fix_missing_rates@Description  :使用mysqldump命令行工具进行备份:在命令行中执行以下命令:mysqldump -u 用户名 -p 密码 数据库名 > 备份文件.sql。这将生成一个包含所有SQL语句的备份文件,其中包括创建表、插入数据等操作。要还原备份,可以使用以下命令:mysql -u 用户名 -p 密码 新数据库名 < 备份文件.sql。@Time         : 2023/7/4 15:48@Author       : Qredsun"""import datetime
import functools
import os
import subprocess
import sys
import timeimport schedule
from loguru import logger# 数据库登录账户、密码
USERNAME = ''
PASSWORD = ''
# 指定备份存放路径
BACKUP_DIR = '/path/to/backup'
# 备份周期
RETENTION_PERIOD = 7logger.remove()  # 删去import logger之后自动产生的handler,不删除的话会出现重复输出的现象
handler_id = logger.add(sys.stderr, level="INFO")  # 添加一个可以修改控制的handlerinfo_log_path = os.path.join('log', datetime.datetime.now().strftime("database_backup_%y_%m_%d_debug.log"))
logger.add(info_log_path,rotation="23:00",retention="7 days",level="DEBUG")
info_log_path = os.path.join('log', datetime.datetime.now().strftime("database_backup_%y_%m_%d_error.log"))
logger.add(info_log_path,rotation="23:00",retention="7 days",level="ERROR")# 备份数据库
def backup_datebase():current_time = datetime.datetime.now()backup_file = current_time.strftime('backup_%y_%m_%d_%H_%M_%S.sql')backup_path = os.path.join(BACKUP_DIR, backup_file)# 使用 subprocess 模块执行数据备份命令 备份数据库所有数据back_command = ['mysqldump','-u',USERNAME,'-p',PASSWORD,'--all-database']with open(backup_path, 'w') as fp:subprocess.run(back_command, stdout=fp)logger.info(f'数据库备份已经完成,备份文件保存路径:{backup_path}')# 清理过期的备份文件
def cleanup_backup():current_time = datetime.datetime.now()expiration_time = current_time - datetime.timedelta(days=RETENTION_PERIOD)for file_name in os.listdir(BACKUP_DIR):file_path = os.path.join(BACKUP_DIR, file_name)if not os.path.isfile(file_path):continuefile_time = datetime.datetime.fromtimestamp(os.path.getatime(file_path))if file_time < expiration_time:os.remove(file_path)logger.info(f'删除过期文件:{file_path}')# 数据备份恢复
def restore_database(backup_file):backup_path = os.path.join(BACKUP_DIR, backup_file)# 使用 subprocess 模块执行数据恢复命令restore_command = ['mysqldump','-u',USERNAME,'-p',PASSWORD,'--all-database']with open(backup_path, 'r') as fp:subprocess.run(restore_command, stdin=fp)logger.info(f'使用 {backup_path} 完成数据库数据恢复')def catch_exceptions(cancel_on_failure = False):def catch_exceptions_decorator(job_func):@functools.wraps(job_func)def wrapper(*args, **kwargs):try:return job_func(*args, **kwargs)except:import tracebacktraceback.format_exc()if cancel_on_failure:return schedule.CancelJobreturn wrapperreturn catch_exceptions_decorator# 异常捕获方法的使用
@catch_exceptions(cancel_on_failure=True)
def task_job():# 定时任务backup_datebase()cleanup_backup()schedule.every().day.at("23:30").do(task_job)while True:schedule.run_pending()  # 运行所有可以运行的任务time.sleep(60*30)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本 SQL 命令 、重要的 SQL命令、SQL 约束 及 SQL语句 的 执行顺序

学习目标&#xff1a; 学习目标如下&#xff1a; SQL语句执行顺序 学习内容&#xff1a; 基本 SQL 命令&#xff1a; FROMONJOINWHEREGROUP BYAGG_FUNCWITHHAVINGSELECT 从数据库中提取数据UNIONDISTINCTORDER BY 排序LIMIT 重要的sql命令&#xff1a; 1、SELECT - 从数据…

Linux:etc/group

etc/group文件中保存着系统中所有组的名称&#xff0c;以及每个组中的成员列表。 文件中的一行为一个组的信息&#xff0c;具体如下&#xff1a; 如果组口令字段为x的话&#xff0c;就还有一个etc/gshadow文件用于存放组口令。 GID用于标识一个组&#xff0c;应保证其唯一性。…

使用 ZBrush、Ornatrix 和 Substance 3D Painter 重现哈利波特中的凤凰

今天瑞云渲染小编给大家带来了Ramn Tapia 分享 Phoenix 项目背后的工作流程&#xff0c;解释了如何在 Ornatrix 中完成修饰&#xff0c;并展示了纹理化过程。 介绍 你好&#xff0c;有创造力的读者朋友们 我的名字是Ramn&#xff0c;但在数字艺术领域&#xff0c;我的名字是ra…

使用fiddler和jmeter进行简单的接口测试。

初学接口测试&#xff0c;以下内容是记录首次使用fiddler和jmeter进行接口测试的步骤&#xff0c;可能步骤有点繁琐&#xff0c;如果有不对的地方&#xff0c;欢迎大家指正。 准备活动&#xff1a; 1、打开fiddler&#xff0c;打开fiddler以后会自动开启代理服务器&#xff08…

89C52RC普中单片机-3

1.LCD1602调试工具 main.c #include<regx52.h> #include "lcd1602.h" void main() {lcd1602_init();//LCD1602初始化();while(1){lcd1602_show_string(0,0,"helloworld");lcd1602_show_string(1,1,"123456.0");} } lcd1602.c #include …

双卡尔曼滤波(KF-UKF)用于考虑电池老化的SOC估计

这篇博文来介绍一下如何使用Simulink来完成无迹卡尔曼滤波的搭建以估计锂电池非线性系统的SOC。 (1)KF估计电池老化。电池的容量会随着每次充放电循环而下降&#xff0c;从而导致SOC估计不准确。当电池在充电和放电之间转换时&#xff0c;使用基于事件的线性卡尔曼滤波器来估计…

Redis 数据库的概念、常用命令

Redis数据库 一、关系数据库与非关系型数据库概述1、关系型数据库2、非关系型数据库3、关系数据库与非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 4、非关系型数据库产生背…

pytorch的permute(dims) 函数的功能详解

有三块 二维矩阵 如下 把二维矩阵堆叠起来&#xff0c;就是三维 矩阵 这样的矩阵 从x方向看&#xff08;0维&#xff09; 有三块 记为3&#xff0c;每块从y方向看&#xff08;1维&#xff09;的行是3&#xff0c;从z方向看&#xff08;2维&#xff09;列也是3&#xff0c;故三…

架构师进阶之路 - 架构优化为什么难

目录 业务迭代和技术优化难以兼顾 缺少“上帝”视角思维 系统架构腐化 缺少架构师视角 系统迭代机制 设计规范把控 最近在组织团队内的系统架构优化&#xff0c;总而言之就是难&#xff0c;至于为什么难我这边总结了以下六个方面&#xff0c;记录一下自己的架构师进阶之路吧。&…

2. 日志模块(上)

日志需求分析 无论对于业务系统还是中间件来说&#xff0c;日志都是必不可少的基础功能。完善、清晰地日志可以帮助我们观测系统运行的状态&#xff0c;并且快速定位问题。现在让我们站在 MyBatis 框架开发者的角度&#xff0c;来简单做一下日志功能的需求分析&#xff1a; 作…

【REST规范】JAX-RS有哪些实现

JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services&#xff0c;是一个Java 编程语言的应用程序接口&#xff0c;支持按照表述性状态转移&#xff08;REST&#xff09;架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java注解来简化Web服务的客…

YUV 8bit转10bit

在有些场景中&#xff0c;我们经常会使用到YUV 8 bit转10bit的场景。 比如YUV420p 8bit 转 P010,P010le,YUV420p10le。 首先说ffmpeg 8 bit 转 10bit. 对于ffmpeg的P010le 和P010be 分别代表小端和大端&#xff0c;那么它转化的时候非常简单&#xff0c;就是8 bit再增加 8bit&…