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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文介绍如何用Python脚本实现MySQL数据库的自动化备份。通过调用`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 的备份权限,以及备份目录的读写权限。
相关文章
|
存储 关系型数据库 MySQL
mysql数据库如何做到定期备份
mysql数据库如何做到定期备份
1149 2
|
Cloud Native 关系型数据库 数据库
云原生之使用Docker部署Mariadb数据库
云原生之使用Docker部署Mariadb数据库
1233 1
云原生之使用Docker部署Mariadb数据库
|
9月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
1292 0
|
6月前
|
消息中间件 Linux API
C 语言并发编程核心原理与实践技巧
C语言无原生线程支持,依赖POSIX pthread实现Linux多线程,并通过互斥锁、信号量解决数据竞争;在嵌入式场景中,FreeRTOS提供任务调度与实时并发机制。本文详解从基础线程创建到同步控制,再到实时系统落地的全流程,掌握高效、可控的C并发核心技术。
128 0
|
6月前
|
存储 Linux 编译器
C 语言学习资源精选:从入门到精通的高效资源清单
本文为C语言学习者提供从入门到精通的完整资源指南,涵盖各阶段的优质视频、书籍、博客、项目及工具,助你高效掌握C语言核心技能,轻松进阶嵌入式与底层开发。
425 0
|
7月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
55153 11
|
8月前
|
存储 关系型数据库 MySQL
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
MySQL是一款开源关系型数据库,高性能、易用、跨平台,支持多种存储引擎,广泛应用于Web开发、企业级应用等领域。本教程介绍其特点、架构及在主流Linux系统中的安装配置方法。
1398 0
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
|
SQL 关系型数据库 MySQL
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
错误提示: Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; che
463 0