用于 MySQL 数据库备份的 Python 脚本

2023-11-10

在数字世界中,数据很有价值。因此,确保数据的安全性和可用性至关重要。这就是备份发挥作用的地方。本文将介绍如何创建一个Python程序来备份MySQL数据库。

对于本教程,我们将使用`mysqldump`实用程序 – 一个强大的工具,可以从现有数据库内容生成 SQL 脚本。我们将使用 Python 执行此实用程序`子进程` module.

先决条件

在深入研究代码之前,请确保您具备以下条件:

  1. Python– 需要安装Python 3。您可以从官方网站下载最新版本。
  2. MySQL服务器– 您应该安装并运行 MySQL 服务器。从 MySQL 官方网站下载。
  3. mysql转储– 该工具预装在 MySQL 服务器中。

Python 程序

点击这里或者使用下面的命令从 Github 下载脚本,或者您可以简单地复制下面的脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/python
 
#################################################### #########
#
# 这个python脚本用于mysql数据库备份
# 使用 mysqldump 和 tar 实用程序。
#
# 撰稿:拉胡尔·库马尔
# 网站:http://tecadmin.net
# 创建日期:2013 年 12 月 3 日
# 最后修改时间:2018 年 8 月 17 日
# 测试使用:Python 2.7.15 和 Python 3.5
# 脚本修订版:1.4
#
#################################################### ########
 
# 导入需要的python库
 
import os
import time
import datetime
import pipes
 
# MySQL 数据库详细信息要对其进行备份。确保以下用户有足够的权限来进行数据库备份。
# 要进行多个数据库备份,请创建任何文件,例如 /backup/dbnames.txt,并将数据库名称每行一个并分配给 DB_NAME 变量。
 
DB_HOST = '本地主机'
DB_USER = 'root'
DB_USER_PASSWORD = '_mysql_用户_密码_'
#DB_NAME = '/backup/dbnameslist.txt'
DB_NAME = '要备份的数据库名称'
备份路径 = '/备份/dbbackup'
 
# 获取当前日期时间以创建单独的备份文件夹,例如“20180817-123433”。
DATETIME = time.strftime('%Y%m%d-%H%M%S')
今天备份路径 = 备份路径 + '/' + DATETIME
 
# 检查备份文件夹是否已存在。如果不存在将创建它。
try:
    os.stat(今天备份路径)
except:
    os.mkdir(今天备份路径)
 
# 用于检查是否要进行单个数据库备份或在 DBNAME 中分配多个备份的代码。
print (“检查数据库名称文件。”)
if os.path.exists(DB_NAME):
    file1 = open(DB_NAME)
    multi = 1
    print (“发现数据库文件...”)
    print (“开始备份文件中列出的所有数据库” + DB_NAME)
else:
    print (“找不到数据库文件...”)
    print (“开始备份数据库” + DB_NAME)
    multi = 0
 
# 开始实际的数据库备份过程。
if multi:
   in_file = open(DB_NAME,"r")
   flength = len(in_file.阅读行())
   in_file.close()
   p = 1
   dbfile = open(DB_NAME,"r")
 
   while p <= flength:
       db = dbfile.readline()   # 从文件中读取数据库名称
       db = db[:-1]# 删除多余的行
       dumpcmd = “mysqldump -h” + DB_HOST + " -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + pipes.quote(今天备份路径) + "/" + db + ".sql"
       os.system(dumpcmd)
       gzipcmd = "gzip " + pipes.quote(今天备份路径) + "/" + db + ".sql"
       os.system(gzipcmd)
       p = p + 1
   dbfile.close()
else:
   db = DB_NAME
   dumpcmd = “mysqldump -h” + DB_HOST + " -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + pipes.quote(今天备份路径) + "/" + db + ".sql"
   os.system(dumpcmd)
   gzipcmd = "gzip " + pipes.quote(今天备份路径) + "/" + db + ".sql"
   os.system(gzipcmd)
 
print ("")
print (“备份脚本完成”)
print (“您的备份已创建于 '” + 今天备份路径 + “' 目录”)

如何使用脚本

该脚本非常易于使用,下载或复制该脚本到本地系统并使用 python 执行它。该脚本能够进行多个数据库备份

单一数据库备份:如果您想使用此脚本进行单个数据库备份,请按如下方式编辑脚本。例如数据库名称是 mydb。


  DB_NAME = 'mydb'
  

多数据库备份:要进行多个数据库备份,请创建一个文本文件(如 /backup/dbnames.txt)并每行添加一个数据库名称,如下所示


# cat /backup/dbnames.txt
database1
mydb
  

并将此文件添加到脚本中,如下所示。


  DB_NAME = '/backup/dbnames.txt'
  

更改备份位置:您可以更改以下变量来更改备份路径的位置。


  BACKUP_PATH = '/backup/dbbackup/'
  

执行Python脚本

下载脚本后,使用以下命令使脚本可执行


chmod +x dbbackup.py
  

并像下面一样执行这个脚本


python2 dbbackup.py
  

您还可以使用 crontab 安排此脚本每天定期运行。在 crontab 中添加以下命令。


0 2 * * * /usr/bin/python dbbackup.py
  

阅读有关 crontab 的更多信息,请访问安排工作的 20 个有用示例.

重要的提示

该程序将密码直接写入命令字符串,这可能会将敏感信息暴露给系统日志或任何可以查看命令行历史记录的人。更安全的替代方法是使用 MySQL 选项文件(`~/.my.cnf`)来存储用户凭据。这看起来像:

1
2
3
[mysql转储]
user=username
password=你的密码

然后,您可以删除`-p`选项从`mysqldump`Python 脚本中的命令。

结论

创建数据库备份是防止数据丢失的重要例程。 Python 与 mysqldump 实用程序相结合,提供了一种灵活且可编程的方法来自动执行此任务。本指南提供了一个强大的脚本来使用 Python 备份 MySQL 数据库。但是,在生产环境中,建议实施更复杂的备份策略,包括错误检查、日志记录、通知系统和定期备份验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于 MySQL 数据库备份的 Python 脚本 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • Visual studio一个项目中多个源文件的单独调试运行

    问题描述 最近刷编程题 想在VS中一个项目中刷所有题目 但VS中一次只能一个包含main的源文件参与生成 不想为每个题目新建项目 很麻烦 解决方案 将其他不需要参加生成的包含main的源文件右键属性 从生成中排除 选 是 操作成功后 不需要
  • 编译原理-词法分析实验

    主要想保存一下实验代码 1 待分析的简单语言的词法 1 关键字 begin if then while do end 所有关键字都小写 2 运算符和界符 3 标识符 ID 整数型常数 NUM 通过正规式定义 4 空格 2 各个单词符号对应的
  • Fastjson 1.2.47反序列化漏洞复现

    目录 一 前期准备 二 fastjson简介 三 漏洞复现 一 创建文件 三 漏洞复现 二 反弹shell 一 前期准备 1 安装jdk 并配置环境 Kali安装JDK 1 8的详细过程 m0 54899775的博客 CSDN博客 2 安装
  • ZigZagPattern之字形图案算法的Java实现

    ZigZagPattern之字形图案算法的Java实现 ZigZagPattern 之字形图案 是一种常见的图案 其特点是呈蛇形排列 在这篇文章中 我们将介绍如何使用Java语言实现这个算法 并展示相应的源代码 首先 让我们来了解一下Zig
  • MySQL 连接池:增强性能的实际示例和策略

    数据库连接是任何应用程序的重要组成部分 因为它们促进应用程序和数据库之间的通信 然而 创建和管理连接可能会占用大量资源且耗时 特别是对于高流量应用程序 连接池是一种有效的技术 可以通过在多个客户端之间重用和共享数据库连接池来缓解这些挑战 通
  • 如何在 Linux Mint 上安装 NRPE 客户端

    NRPE Nagios 远程插件执行器 是一个允许您在远程 Linux 或 Unix 服务器上远程执行 Nagios 插件的工具 它使您能够监控远程主机的资源 例如 CPU 使用率 磁盘空间和其他性能指标 并将结果报告给中央 Nagios
  • CentOS 8 – 初始服务器设置

    使用本教程首次配置您的 CentOS 8 Linux 计算机 例如 您使用 CentOS 8 启动了新的 VPS 或专用主机 请按照以下步骤完成 CentOS 8 的初始服务器设置 第 1 步 登录 CentOS 8 登录到您的 CentO
  • 使用带有自动重启功能的 CRON 监控 Systemd 服务

    持续的服务可用性对于 Linux 系统的顺利运行至关重要 必须有一种机制可以检测服务何时关闭并自动重新启动它以最大限度地减少停机时间 在本文中 我们将讨论如何使用 cron 作业来监控服务状态并在服务关闭时自动重新启动服务 此外 我们还将介
  • 如何使用 JavaScript 检查复选框是否被选中

    本教程将帮助您使用 jQuery 编写 JavaScript 代码 该代码检查复选框是否已选中 并据此执行操作 这在提交任何表单之前检查是否选中任何复选框很有用 JavaScript 代码 下面是检查复选框 id checkBox1 是否被
  • Bash Case 语句语法和示例

    CASE 语句是 Bash 中强大的条件语句 允许您根据值列表测试变量 它是使用多个 if then 语句的更简洁 更有效的替代方案 很多时候它是一个很好的替代品if else 语句 您还可以使用它来处理命令行参数在 shell 脚本中 在
  • 在 MacOS 中设置环境变量

    环境变量是在本地计算机 运行程序的计算机 上存储值的一种方式 例如 您可以存储用于登录系统的用户 ID 您还可以使用环境变量来存储配置设置 例如数据库连接的名称 设置环境变量时 考虑安全影响非常重要 如果攻击者能够访问您的环境变量 他们就可
  • Linux 中的 Grep 命令(搜索文件中的文本)

    Grep 是一个强大的文本搜索工具 Grep 的意思是 全局正则表达式打印 基本上 Grep 在文本文件中搜索指定的正则表达式 并将包含匹配项的任何行输出到标准输出 因此Grep命令可用于在一个或多个文本文件中搜索某种文本 单词 模式或句子
  • 通过 Break 和 continue 掌握 Bash 控制流程

    Bash 是一种功能强大的脚本语言 通常用于自动化和系统管理任务 Bash 脚本中最重要的概念之一是控制流 它是指脚本根据各种条件执行不同命令的方式 Bash 中两个关键的控制流语句是 break 和 continue 它们可以帮助您控制代
  • 如何在 Ubuntu 18.04 LTS 上使用 PHP-FPM 安装 Nginx

    本教程将帮助您在 Ubuntu 18 04 Bionic LTS 系统上使用 PHP FPM FastCGI 安装 Nginx Web 服务器 在本教程中 我们使用 PHP 7 3 并使用 PHP FPM 和 FastCGI 配置 Ngin
  • 如何在 Vim 中使用交换文件恢复文件

    Vim 是一款功能强大的文本编辑器 几十年来一直是开发人员和系统管理员的首选工具 然而 强大的能力也可能带来巨大的损失 没有什么比因系统崩溃或断电而损失数小时的工作时间更令人沮丧的了 幸运的是 Vim 有一个称为交换文件的内置功能 可以帮助
  • 如何在 CentOS/RHEL 7/6 上安装和配置 HAProxy

    HAProxy is a very fast and reliable solution for high availability load balancing It supports TCP and HTTP based applica
  • 如何在 CentOS/RHEL 9/8 上设置 CakePHP

    CakePHP 是一个强大而全面的 PHP 框架 遵循 MVC 模型 视图 控制器 方法 它因其基于约定的 Web 开发方法而受到好评 该方法可以促进快速的开发周期 在本文中 我们将指导您完成在 CentOS RHEL 8 9 系统上设置
  • 如何在 Fedora 36/35/34 上安装 Atom 文本编辑器

    Atom是一个现代的开源文本或源代码编辑器 它的核心是可破解的 这意味着这个工具可以定制来执行任何操作 它适用于 OS X Linux 和 Windows 系统 本文将帮助您在 Fedora Linux 系统上安装 Atom 文本编辑器 您
  • Python 程序查找给定数字的因数

    Python 是一种多功能且功能强大的编程语言 由于其可读性和高效性 已成为初学者和专家的最爱 这种综合性语言不仅限于网络开发或数据分析 相反 它已被证明是解决数学问题的绝佳工具 此类应用之一就是求一个数的因数 今天 我们将探索如何创建一个
  • 用于 MySQL 数据库备份的 Python 脚本

    在数字世界中 数据很有价值 因此 确保数据的安全性和可用性至关重要 这就是备份发挥作用的地方 本文将介绍如何创建一个Python程序来备份MySQL数据库 对于本教程 我们将使用 mysqldump 实用程序 一个强大的工具 可以从现有数据