当前位置: 首页 > news >正文

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

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

在这里插入图片描述

永远热爱,永远执着!

工具介绍

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

这段 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.lryc.cn/news/325388.html

相关文章:

  • 测试环境搭建整套大数据系统(十二:挂载磁盘到hadoop环境)
  • Spring事务核心:声明式事务注解式事务
  • AcWing 1015. 摘花生
  • Dalle-3、Sora、Stable Diffusion 3 掀起AIGC新浪潮
  • Unity 视频组件 VideoPlayer
  • RSTP环路避免实验(华为)
  • Arduino IDE工程代码多文件编程和中文设置
  • 【微服务】Eureka(服务注册,服务发现)
  • windows上ssh设置代理,直接访问公司内网
  • C++ union用法
  • JavaSE_运算符 案例分析
  • 15、Spring Cloud Alibaba Sentinel实现熔断与限流
  • Linux logout命令教程:如何安全地退出Linux会话(附实例详解和注意事项)
  • 数据结构——顺序表(C语言版)
  • Knative 助力 XTransfer 加速应用云原生 Serverless 化
  • 服务器离线配置vscode连接,conda虚拟环境
  • 各种需要使用的方法-->vue/微信小程序/layui
  • 360奇酷刷机 360刷机助手 QGDP360手机QGDP刷机
  • 2299. 强密码检验器 II
  • 跟着cherno手搓游戏引擎【29】Batch简单合批
  • 粘包/半包及解决方案
  • 2024华为软件精英挑战赛记录
  • 数据可视化艺术:Matplotlib与Seaborn实战
  • python初级第一次作业
  • Spring Boot整合Camunda打造高效工作流程
  • 2.8、下拉刷新与上拉加载
  • java Web餐馆订单管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
  • 小程序从入门到入坑:事件系统
  • Windows蓝牙驱动开发之模拟HID设备(二)(把Windows电脑模拟成蓝牙鼠标和蓝牙键盘等设备)
  • 快速区分清楚图形渲染中的AABB,KD树和BVH这些概念