Python脚本每日自动备份MySQL数据库,无需mysqldump

编写一个Python脚本,每天凌晨3点开始备份

脚本具有以下特点

  • 不需要安装mysql-client,并且Windows Linux都可以使用
  • 支持多个数据库连接的备份
  • 每个数据库支持多个表备份
  • 日志保存下来,方便第二天早上查看备份结果

首先安装需要的库

pip3 install pymysql loguru

支持多个数据库

在这里插入图片描述

可选开始备份时间

在这里插入图片描述

备份速率调整

在这里插入图片描述
备份有大量数据传输,虽然是在夜间,也要控制速率,防止对服务端压力过大,1000条为limit的查询,可以控制下行带宽在5Mbps以下,不过上百万条数据的表,可能要备份很久。可以凌晨1点就开始备份,或者把1000条延时从0.2调到0.1或更短,或者调整每次查询的limit到5000。

开始备份时的控制台截图:

在这里插入图片描述

完整代码(需填入自己的数据库地址、端口、密码)

# author @xuehu96 2024-9-22
import os
import time
from datetime import datetimeimport pymysql
from loguru import logger# author @xuehu96 2024-9-22
def backup_database(host, port, user, password, databases):logger.info(f"Linking {host} ...")for db_name in databases:try:# 连接到数据库conn = pymysql.connect(host=host, port=port, user=user, password=password, database=db_name,charset='utf8mb4')cursor = conn.cursor()logger.info(f"Backuping {db_name} ...")# 创建备份文件夹backup_folder = f"./backups/{db_name}"if not os.path.exists(backup_folder):os.makedirs(backup_folder)# 获取当前日期current_date = datetime.now().strftime("%Y-%m-%d")# 备份数据库backup_file = f"{backup_folder}/{current_date}.sql"with open(backup_file, "w", encoding='utf-8') as f:# 获取所有表名cursor.execute("SHOW TABLES")tables = cursor.fetchall()for table in tables:table_name = table[0]logger.info(f"Backing table {table_name} ...")# 导出表结构cursor.execute(f"SHOW CREATE TABLE {table_name}")create_table_sql = cursor.fetchone()[1]f.write(f"{create_table_sql};\n\n")# 导出表数据limit = 1000  # 每次查询1000条记录offset = 0while True:cursor.execute(f"SELECT * FROM {table_name} LIMIT {offset}, {limit}")rows = cursor.fetchall()if not rows:break  # 当没有更多数据时退出循环for row in rows:placeholders = []for value in row:if value is None:placeholders.append('NULL')elif isinstance(value, (int, float)):placeholders.append(f"{value}")else:placeholders.append(f"'{value}'")placeholders = ', '.join(placeholders)query = f"INSERT INTO {table_name} VALUES ({placeholders});"f.write(f"{query}\n")f.write("\n")offset += limittime.sleep(0.2)  # 每处理一批数据后暂停0.2秒logger.info(f"Backup table {table_name} successfully, inserted {len(rows)} rows.")# 关闭连接cursor.close()conn.close()logger.info(f"Backup of {db_name} completed successfully.")except Exception as e:logger.error(f"Backup of {db_name} failed: {e}")finally:time.sleep(1)# author @xuehu96 2024-9-22
def main():logger.add("backup.log")while True:now = datetime.now()if now.hour == 3 and now.minute == 0:logger.info("Starting backup process.")# 第一个数据库连接信息host1 = "192.168.127.12" # 填写数据库IP或域名port1 = 2049user1 = "root"password1 = "XXXXXXXXXXXXXX"databases1 = ['DB1', 'DB2', 'test', 'test2', 'V5', 'V6', 'V7'] # 备份的数据库列表# 备份第一个数据库连接backup_database(host1, port1, user1, password1, databases1)# 第二个数据库连接信息host2 = "sh-XXXX.com"port2 = 2599user2 = "root"password2 = "XXXXXXXXXXXXXX"databases2 = ['ERP', 'DEVICE', 'GATEWAY']# 备份第二个数据库连接backup_database(host2, port2, user2, password2, databases2)logger.info("Backup process completed.")breaktime.sleep(60)if __name__ == "__main__":main()# author @xuehu96 2024-9-22

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

调节 PWM的占空比控制舵机的角度

一、PWM工作原理 让计数器从0数到自动重装载值,不停计数。计数值小于输出比较寄存器时输出一种电平,大于输出比较寄存器时使出另一种电平。 修改定时器时钟源的速度以及预分频器等设置,可以修改计数器计数的速度 再加上修改自动重装载值&…

肺结节检测系统源码分享

肺结节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

python画图|图像背景颜色设置

python画图出来的默认图形背景是白色,有时候并不适合大家表达想要表达的意思。 因此,我们很有必要掌握自己设置图形背景颜色的技巧。 【1】官网教程 首先请各位看官移步官网,看看官网如何设置,下述链接可轻松到达: …

如何将很多个pdf拼接在一起?很多种PDF拼接的方法

如何将很多个pdf拼接在一起?将多个PDF文件合并不仅能够提升信息的整合性,还能使文件管理更加高效。想象一下,你需要向同事或老师提交一份综合报告,其中包含了多份相关资料。如果每个文件单独存在,查找和传输都会变得繁…

IDEA中Quarkus框架(3.13版本)开发、调试、部署、打包等

code-with-quarkus code-with-quarkus 是使用官网生成的demo项目 这个项目使用Quarkus(使用3.13.0版本,该版本支持JDK21),超音速亚原子Java框架。官网地址: https://quarkus.io/. 环境要求 OS: Windows 10.0 jdk 11 maven 3.9…

2024年研赛-华为杯数模竞赛F题论文首发+论文讲解

本届研赛助攻题目 C D F三题论文均已经全部完成。后更新计划 如图所示。 免费给大家分享 三个问题的论文部分代码 2024年华为杯-研赛分享资料(论文部分代码)(已更新部分代码): 链接:https://pan.baidu.com…

【Pyside】pycharm2024配置conda虚拟环境

知识拓展 Pycharm 是一个由 JetBrains 开发的集成开发环境(IDE),它主要用于 Python 编程语言的开发。Pycharm 提供了代码编辑、调试、版本控制、测试等多种功能,以提高 Python 开发者的效率。 Pycharm 与 Python 的关系 Pycharm 是…

springboot实战学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记(4)(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次,点赞7…

Java免税商品购物商城:Spring Boot实现详解

第一章 绪论 1.1 课题开发的背景 从古至今,通过书本获取知识信息的方式完全被互联网络信息化,但是免税商品优选购物商城,对于购物商城工作来说,仍然是一项非常重要的工作。尤其是免税商品优选购物商城,传统人工记录模式…

【Proteus仿真】基于51单片机的L298N电机电速调节

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,L298N电机驱动连接电机,采用调节PWM占空比来控制电机速度转动。 仿真图: 编辑 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行…

SQL - 进阶语法(一)

1. SELECT TOP SELECT TOP Number|Percentage column1 from ... 选择所需要的数据的前多少行,Number表示具体数值,Percentage表示百分比 2. LIKE 搜索列元素的指定模式,匹配对应的信息进行自定义搜索 通常需要搭配通配符进行使用 %替代…

Postman cURL命令导入导出

导入cURL命令 cURL是一种用于发出HTTP请求的流行命令行工具。在测试Web应用程序或API时,cURL使您能够直接从命令行进行交互,使用API开发人员社区中常见的完善语法。如果在不同的地方有多个cURL命令,可以将它们导入Postman。 ​ 将cURL命令导入…

1.5 计算机网络的分层结构

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言1 分层设计2 网络体系结构2.1 基本概述2.2 常见的三种网络体系结构 3 各层之间的关系3.1 水平关系3.2 垂直关系 4 数据传输过程4.1 水平视角4.2 垂直视角 前言 在当今数字…

【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社

探索RAG系统新高度:《大模型RAG实战:RAG原理、应用与系统构建》 随着大模型技术的爆发,尤其是ChatGPT之后,以ChatPDF为首的知识库问答产品迅速走红,引发了RAG(检索增强生成)系统的广泛关注与讨论…

EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

macOS平台编译libidn2库给iOS及macOS用

1.克隆源码: git clone https://gitlab.com/libidn/libidn2.git --recursive 2.安装依赖库: pkg-config也要安装 3.启动bootstrap生成configure 配置成功 configure生成成功

TikTok提示“Network is out of reach”怎么处理?

当TikTok提示“Network is out of reach”时,意味着应用无法连接到互联网。导致这一问题的常见原因包括网络连接不稳定、地理限制或网络设置与应用不兼容等。解决方法有:拔除手机卡、关闭手机定位服务、切换至稳定的海外IP网络等。使用TikTok专用网络也可…

数据结构字节对齐

求 sizeof(name1)?(晟安信息) struct name1{ char str; short x; int num; }; 8 分析:char 1字节,short 2字节,int 4字节;所以以4字节为一个步长,需要2步长,所以sizeof(name1)为8。 (电工时代) …

C++入门基础知识79(实例)——实例 4【求商及余数】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 实例 【求商及余数】相关内容&#xf…

【Go】Go 环境下载与安装教程(Windows系统)

引言 Go,也被称为Golang,是一种静态类型,编译型的编程语言,由Google设计和开发。Go语言的设计目标是“解决软件开发中的一些问题”,特别是在大规模软件系统的构建和维护方面。 下载安装包 打开官网下载页面&#xff…