用 Python 实现 MySQL 数据库定时自动备份

简介: 本文介绍如何用Python脚本实现MySQL数据库的自动化备份。通过`subprocess`调用`mysqldump`,结合时间戳命名、文件压缩与crontab定时任务,可高效完成无人值守备份,提升数据安全性与运维效率。

日常开发中,数据库备份是必备操作。手动备份不仅麻烦,还容易忘 —— 用 Python 写个自动化脚本,搭配定时任务,就能实现 “无人值守” 的 MySQL 备份,省心又可靠。

一、实现思路

  1. subprocess模块调用 MySQL 自带的mysqldump工具,生成数据库备份文件;
  2. 给备份文件命名(包含时间戳,避免重名);
  3. 可选:将备份文件压缩(节省空间);
  4. 搭配系统定时任务(比如 Linux 的 crontab),实现定时自动执行。

二、准备工作

  1. 确保环境已安装 Python(3.x 版本);
  2. MySQL 已安装mysqldump工具(一般随 MySQL 一起安装);
  3. 知道 MySQL 的用户名、密码、数据库名,以及备份文件要存放的目录。

三、Python 脚本代码实现

python

运行

import subprocess
import time
import os
import zipfile
# ---------------------- 配置项(根据你的实际情况修改) ----------------------
MYSQL_USER = "root"          # MySQL用户名
MYSQL_PASSWORD = "your_pwd"  # MySQL密码
MYSQL_DB = "test_db"         # 要备份的数据库名
BACKUP_DIR = "/opt/mysql_backup"  # 备份文件存放目录
# --------------------------------------------------------------------------
# 1. 创建备份目录(如果不存在)
if not os.path.exists(BACKUP_DIR):
    os.makedirs(BACKUP_DIR)
# 2. 生成备份文件名(包含时间戳,格式:数据库名_年-月-日_时-分-秒.sql)
timestamp = time.strftime("%Y-%m-%d_%H-%M-%S")
backup_filename = f"{MYSQL_DB}_{timestamp}.sql"
backup_filepath = os.path.join(BACKUP_DIR, backup_filename)
# 3. 调用mysqldump执行备份
try:
    # 拼接mysqldump命令(注意:密码直接写在命令里有安全风险,生产环境建议用配置文件)
    cmd = f"mysqldump -u{MYSQL_USER} -p{MYSQL_PASSWORD} {MYSQL_DB} > {backup_filepath}"
    # 执行命令
    subprocess.run(cmd, shell=True, check=True)
    print(f"数据库备份成功!文件路径:{backup_filepath}")
except subprocess.CalledProcessError as e:
    print(f"备份失败:{e}")
    exit(1)
# 4. (可选)压缩备份文件(用zip格式)
zip_filename = f"{backup_filepath}.zip"
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.write(backup_filepath, arcname=backup_filename)
# 压缩后删除原sql文件(可选)
os.remove(backup_filepath)
print(f"文件压缩成功!压缩包路径:{zip_filename}")

四、脚本使用说明

  1. 修改代码中的配置项(用户名、密码、数据库名、备份目录);
  2. 运行脚本:python3 mysql_backup.py,执行后去备份目录看是否生成了压缩包;
  3. 定时执行(以 Linux 为例):
  • 打开 crontab 编辑:crontab -e
  • 添加定时任务(比如每天凌晨 2 点执行):bash

    运行
0 2 * * * /usr/bin/python3 /path/to/your/mysql_backup.py >> /var/log/mysql_backup.log 2>&1
  1. (解释:0 2 * * *代表每天 2 点,后面是脚本路径,最后把日志输出到指定文件)

五、注意事项

  • 密码安全:脚本里直接写密码有风险,生产环境可以把 MySQL 用户名 / 密码写在~/.my.cnf配置文件中,避免明文暴露;
  • 备份清理:定期清理旧的备份文件(可以在脚本里加 “删除 7 天前的备份” 逻辑);
  • 权限问题:确保执行脚本的用户有 MySQL 的备份权限,以及备份目录的读写权限。
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
MySQL 学习资源精选:从入门到优化的高效清单
本文针对MySQL学习中的“资源杂、路径乱”痛点,按“入门→进阶→实战”三阶段梳理高效学习路径,推荐优质视频、书籍、项目等资源,结合实操建议与避坑指南,助力学习者从零基础快速掌握核心语法、底层原理到企业级项目落地能力,少走弯路,实现能力跃迁。
|
2月前
|
JSON 人工智能 API
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
`comfyui_xy` 是一个轻量级 Python 客户端库,封装 ComfyUI API,支持一键上传图片/遮罩、动态修改工作流、自动排队执行与结果下载(图/视/音频)。安装即用,无需处理底层 HTTP/WebSocket 细节,助力 AIGC 自动化开发。开源免费,PyPI 可装。
1225 128
|
4月前
|
IDE 开发工具 C++
Python 初学者常见 10 大误区与避坑指南
本文总结Python初学者易犯的10大编码误区,如缩进错误、混淆“==”与“is”、修改迭代列表等,结合典型案例解析原因并提供实用解决方案,帮助新手规避常见陷阱,建立正确的Python编程思维,提升代码质量与可读性。
|
4月前
|
存储 关系型数据库 MySQL
MySQL 项目实战入门:从 0 到 1 搭建电商数据库
本文以电商系统为实战场景,手把手教你从零搭建MySQL数据库。涵盖环境配置、需求分析、表结构设计(遵循三大范式)、数据初始化、关联查询及性能优化,结合SQL语句与设计思路,帮助初学者快速掌握数据库项目落地全流程。
|
4月前
|
Java 数据库连接 微服务
Java高效学习指南:从入门到精通的科学路径与实践方法
本文系统梳理Java从入门到精通的科学学习路径,涵盖基础语法、面向对象、集合框架、并发编程、JVM原理、主流框架(Spring/Spring Boot/MyBatis)及项目实战,结合高效学习方法与优质资源推荐,助力开发者构建扎实技术体系,少走弯路,快速进阶。
|
4月前
|
架构师 Java 数据库
Java开发进阶:从初级工程师到架构师的能力提升路径
Java开发者从初级到架构师需经历技术与软实力的全面提升。本文梳理各阶段能力要求:夯实基础、掌握主流框架、深入分布式技术、培养系统设计与业务洞察力,助力开发者明确职业进阶路径,成长为具备全局视野的技术领导者。
|
4月前
|
存储 NoSQL 关系型数据库
Python 持久层开发:从文件到数据库的实践指南
Python持久层开发覆盖全场景需求,从轻量文件(TXT/CSV/JSON)到关系型数据库(SQLite/MySQL/PostgreSQL),再到非关系型数据库(MongoDB/Redis),结合ORM工具,按需选型可实现高效、可靠的数据存储与访问,适配从小工具到企业级系统的各类应用。
|
4月前
|
SQL 前端开发 数据处理
Python 项目实战入门:从 0 到 1 搭建简易学生信息管理系统
本文以简易学生信息管理系统为例,详解Python Web项目从需求分析、技术选型到编码部署的完整流程。采用Flask+SQLite+Bootstrap轻量栈,实现增删改查与Excel导出,助初学者快速掌握开发逻辑与实战技能。
|
4月前
|
运维 关系型数据库 Linux
Linux 高效学习指南:从入门到运维的科学路径
本文介绍Linux运维学习的科学路径,主张“场景驱动”替代死记硬背。涵盖四大阶段:一周掌握核心命令,两周理解系统原理与故障排查,两周实战部署LNMP服务,长期进阶自动化运维。强调动手实操、问题驱动与循序渐进,提供各阶段目标、任务与资源推荐,助你高效构建完整知识体系,成为实战型运维人才。
|
4月前
|
机器学习/深度学习 人工智能 数据挖掘
Python 学习资源精选:从入门到精通的高效清单
本文系统梳理Python从入门到精通的学习路径,分阶段推荐优质资源:入门夯实语法,进阶掌握核心特性,场景定向深耕Web、数据或AI方向,最终提升工程化能力。涵盖视频、书籍、项目与工具,助力高效构建完整知识体系。

热门文章

最新文章