数据库备份工具(实现数据定时覆盖)

数据库备份工具(实现数据定时覆盖)

在这里插入图片描述

永远热爱,永远执着!

工具介绍

自动化测试数据库更新调度程序

这段 Python 脚本自动化了每天定时从生产数据库更新测试数据库的过程。它利用了 schedule 库来安排并执行每天指定时间的更新任务。

特点:

  • 自动数据库更新: 脚本自动连接到生产数据库,检索所有表,并将它们的数据转移到测试数据库。

  • 日志记录: 实现了全面的日志记录,以跟踪执行状态和更新过程中可能发生的任何错误。日志存储在 update_test_db.log 文件中。

  • 批处理处理: 数据传输分批进行,以优化性能,确保对大型数据集的高效处理。

如何使用:

  1. 配置:

    • prod_db_configtest_db_config 字典中配置生产和测试数据库的连接参数,包括用户名、密码、IP 地址、数据库名称和端口。
  2. 依赖项:

    • 确保已安装所需的依赖项。如果没有,请使用 pip install -r requirements.txt 进行安装。
    • cd ./static
    • pip install .\mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl
  3. 日志记录:

    • 日志写入到 update_test_db.log 文件中。确保脚本对其所在目录具有写权限。
  4. 调度:

    • 更新任务被安排在每天午夜(00:00)执行。您可以通过修改 schedule.every().day.at("00:00").do(update_test_db) 行来调整计划。
  5. 执行:

    • 运行脚本。它将每 60 秒检查一次是否有待处理任务。
  6. 监控:

    • 监视日志文件 (update_test_db.log),以跟踪执行状态和更新过程中可能遇到的任何潜在错误。

注意:

  • 数据完整性:

    • 确保生产数据库包含必要的数据,并且测试数据库仅用于测试目的,以避免意外修改。
  • 安全性:

    • 保护数据库凭据,并限制对敏感信息的访问。
  • 错误处理:

    • 脚本包含了健壮的错误处理机制,以捕获并记录执行过程中可能出现的任何异常。

打包应用程序:

您可以使用 PyInstaller 将脚本打包成一个可执行文件,并且可以指定一个图标作为应用程序的图标。例如,您可以运行以下命令:

pyinstaller --onefile --icon=my_icon.ico your_script.py

这将创建一个独立的可执行文件,用户可以直接运行而无需安装 Python 或其他依赖项。

贡献:

欢迎对脚本进行贡献和改进。请随时 fork 仓库,进行修改,并提交 pull 请求。

关于:

该脚本旨在简化测试数据库更新的过程,促进更顺畅的开发和测试工作流程。

祝愉快的测试! 🚀

核心源码

import schedule
import time
import pandas as pd
from sqlalchemy import create_engine, text# 生产数据库配置
prod_db_config = {'username': 'root','password': 'root','ip': '127.0.0.1','database': 'test1','port': 3306
}# 测试数据库配置
test_db_config = {'username': 'root','password': 'root','ip': '127.0.0.1','database': 'test2','port': 3306
}def update_test_db():try:# 构建测试数据库连接字符串test_db_url = f"mysql://{test_db_config['username']}:{test_db_config['password']}@{test_db_config['ip']}:{test_db_config['port']}/{test_db_config['database']}?charset=utf8mb4"# 创建测试数据库引擎test_engine = create_engine(test_db_url)# 测试连接是否成功with test_engine.connect() as conn:conn.execute(text("select 1"))print("成功连接到测试数据库.")# 清除测试数据库中的所有表with test_engine.connect() as conn:tables = conn.execute("SHOW TABLES").fetchall()if tables:for table in tables:conn.execute(f"DROP TABLE IF EXISTS {table[0]}")# 获取生产数据库中的所有表prod_db_url = f"mysql://{prod_db_config['username']}:{prod_db_config['password']}@{prod_db_config['ip']}:{prod_db_config['port']}/{prod_db_config['database']}?charset=utf8mb4"prod_engine = create_engine(prod_db_url)with prod_engine.connect() as prod_conn:tables = prod_conn.execute("SHOW TABLES").fetchall()print("从生产数据库中获取表完成.")# 将生产数据库中的所有表数据备份到测试数据库for table in tables:table_name = table[0]print(f"备份表 {table_name} 数据...")data = pd.read_sql_table(table_name, prod_conn)data.to_sql(table_name, test_engine, index=False, if_exists='replace')print(f"表 {table_name} 数据备份完成.")print("测试数据库更新成功.")except Exception as e:print("更新测试数据库时出错:", e)if __name__ == "__main__":# 将任务调度在每天特定时间执行schedule.every().day.at("23:22").do(update_test_db)# 运行定时任务while True:schedule.run_pending()time.sleep(60)

运行效果

1.可直接代码运行

在这里插入图片描述

1.可执行exe程序

在这里插入图片描述

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

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

相关文章

在for循环加判断条件当条件都满足时,同时显现的解决方法

一、代码示例 function fu(s) {str ;ste ;console.log(s);let Things s;for (let i 0; i < Things.length; i) {if (Things[i].pid kk) {console.log(Things[i].pid);ste <div class"commodity_nei"><div class"zxc_pic"><div cl…

[CISCN2019 总决赛 Day2 Web1]Easyweb ----不会编程的崽

CISCN的题质量还是很高的。 又是这熟悉的登陆界面。爆破&#xff1f;sql&#xff1f;还是xxe等。先看源码 估摸着也是sql注入。但似乎不是常规注入。同时扫描后台的结果应该也出来了&#xff0c;发现robots.txt 有点懵&#xff0c;后边看了大佬的wp才知道&#xff0c;提示的是*…

openssl 升级1.1.1.1k 到 3.0.13

下载 https://www.openssl.org/source/ tar -zxvf openssl-3.0.13.tar.gzcd openssl-3.0.13/./config enable-fips --prefix/usr/local --openssldir/usr/local/opensslmake && make install 将原有openssl备份 mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/i…

LeetCode Python - 73. 矩阵置零

目录 题目描述解法方法一&#xff1a;数组标记方法二&#xff1a;原地标记 运行结果方法一方法二 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;…

Redis到底是多线程还是单线程?

Redis6.0之前&#xff1a;是单线程模式。 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。 Redis6.0之前&#xff1a;单线程 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。

适用于 Android 的 10 个优秀的数据恢复工具

在当今快节奏的数字时代&#xff0c;丢失 Android 设备中的重要数据可能是一场噩梦。无论是难忘的照片、重要的联系人还是重要的工作文档&#xff0c;您都需要一个可靠的恢复工具来恢复您的数据。值得庆幸的是&#xff0c;有许多高效的 Android 数据恢复工具可以帮助您恢复丢失…

【python】flask各种版本的项目,终端命令运行方式的实现

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

XUbuntu22.04之跨平台日历工具(二百二十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

WSL2 设置桥接模式

文章目录 一、前言二、准备阶段三、环境配置3.1 Type-V管理器环境配置3.2 新增.wslconfig 文件 四、遇到的问题以及解决方案 一、前言 ​ 使用 wsl 的过程中&#xff0c;会出现 WSL 的IP地址 找不到&#xff0c;或者无法和计算机通讯&#xff0c;搞 嵌入式 的话&#xff0c;还…

网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)

目录 一、以太网数据帧&#xff08;数据链路层&#xff09; 二、DNS协议(域名解析系统&#xff0c;应用层协议) 一、以太网数据帧&#xff08;数据链路层&#xff09; 以太网横跨了数据链路层和物理层&#xff0c;这里只做简单介绍&#xff0c;因为普通程序员用不到这一块&am…

浅谈linux下的进程地址空间(虚拟地址/线性地址)

目录 什么是地址空间 - 虚拟地址空间 地址空间是如何设计的 为什么要有地址空间 什么是地址空间&#xff1f; 示例&#xff1a; 运行之后发现&#xff1a;同一个变量&#xff0c;同一个地址&#xff0c;在运行一段时间后&#xff0c;竟然会在同一时间出现两个不同的值&…

阿里云短信平台收费价格表,短信服务优惠0.032元一条

2024年阿里云短信服务优惠价格表&#xff0c;阿里云短信多少钱一条&#xff1f;低至0.01元一条&#xff0c;200条短信仅需2元&#xff0c;最高可领2000条短信免费赠送&#xff0c;短信套餐包2000条、5000条、5万条等均有活动&#xff0c;阿里云百科aliyunbaike.com整理2024年最…

数字乡村战略实施:科技引领农村经济社会全面发展

随着信息技术的快速发展&#xff0c;数字化已经成为推动经济社会发展的重要力量。在乡村振兴战略的大背景下&#xff0c;数字乡村战略的实施成为了引领农村经济社会全面发展的关键。本文将从数字乡村战略的内涵、实施现状、面临挑战及未来展望等方面&#xff0c;探讨科技如何引…

MySQL数据库备份策略与实践详解

目录 引言 一、MySQL数据库备份的重要性 &#xff08;一&#xff09;数据丢失的原因 &#xff08;二&#xff09;数据丢失的后果 二、MySQL备份类型 &#xff08;一&#xff09;根据数据库状态 &#xff08;二&#xff09;根据数据的完整性 &#xff08;三&#xff09;…

线程的状态:操作系统层面和JVM层面

在操作系统层面&#xff0c;线程有五种状态 初始状态&#xff1a;线程被创建&#xff0c;操作系统为其分配资源。 可运行状态(就绪状态)&#xff1a;线程被创建完成&#xff0c;进入就绪队列&#xff0c;参与CPU执行权的争夺。或因为一些原因&#xff0c;从阻塞状态唤醒的线程…

CCF-CSP认证考试 202212-2 训练计划 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202212-2 训练计划 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题背景 西西艾弗岛荒野求生大赛还有 n n n 天开幕&#xff01; 问题描述 为了在大赛中取得…

【Linux】进程的基本概念(进程控制块,ps命令,top命令查看进程)

目录 01.进程的基本概念 程序与进程 进程的属性 02.进程控制块&#xff08;PCB&#xff09; task_struct的内容分类 组织进程 03.查看进程 ps命令 top指令 在计算机科学领域&#xff0c;进程是一项关键概念&#xff0c;它是程序执行的一个实例&#xff0c;是操作系统的…

Mybatis的核心配置文件

MyBatis的全局配置文件mybatis-config.xml&#xff0c;配置内容如下&#xff1a; properties&#xff08;属性&#xff09;settings&#xff08;全局配置参数&#xff09;typeAliases&#xff08;类型别名&#xff09;typeHandlers&#xff08;类型处理器&#xff09;objectFa…

面试知识汇总——垃圾回收器(分代收集算法)

分代收集算法 根据对象的存活周期&#xff0c;把内存分成多个区域&#xff0c;不同区域使用不同的回收算法回收对象。 对象在创建的时候&#xff0c;会先存放到伊甸园。当伊甸园满了之后&#xff0c;就会触发垃圾回收。 这个回收的过程是&#xff1a;把伊甸园中的对象拷贝到F…

【物联网】Qinghub Kafka 数据采集

基础信息 组件名称 &#xff1a; kafka-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通用kafka连接网关&#xff0c;消费来自kafka的数据&#xff0c;并转发给下一个节点做相关的数据解析。 配置文…