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

简介: 本文介绍如何用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 的备份权限,以及备份目录的读写权限。
相关文章
|
3月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
27646 10
|
Cloud Native 关系型数据库 数据库
云原生之使用Docker部署Mariadb数据库
云原生之使用Docker部署Mariadb数据库
1045 1
云原生之使用Docker部署Mariadb数据库
|
19天前
|
运维 安全 网络安全
WinSCP使用步骤详解(附安装与文件传输教程)
WinSCP是一款Windows平台的图形化文件传输工具,支持SFTP/FTP协议,可安全高效地在本地与远程服务器间传输文件。安装简便,操作直观:下载即用,填写IP、端口、账号信息后快速连接。界面分左右双窗格,分别显示本地与远程文件,支持拖拽上传下载、批量操作。支持密码及密钥登录,会话可保存,方便重复使用,是运维与开发人员的实用工具。
|
容器
Unable to create tempDir. java.io.tmpdir is set to /tmp
Unable to create tempDir. java.io.tmpdir is set to /tmp
694 1
|
2月前
|
人工智能 搜索推荐 机器人
智能体是什么?3 分钟读懂 AI 智能体核心能力与应用场景
AI 智能体是具备自主理解、决策、执行任务能力的新一代 AI 系统,区别于传统 “指令响应式” 工具,它能像人类搭档一样拆解复杂需求、联动多能力模块完成闭环工作。NuwaAI 作为智能体数字人领域的标杆产品,已实现 “一句话生成智能体数字人”,其独创的双脑架构可支撑教育培训、电商直播、文旅表演、企业服务等 8 大场景,帮助用户将表达力转化为生产力,实测能降低 80% 的重复工作人力成本(数据来源:2025 年 AI 智能体行业白皮书)。
|
5月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能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
359 0
|
安全 jenkins 持续交付
如何在 Jenkins 中配置邮件通知?
如何在 Jenkins 中配置邮件通知?
824 11
|
数据采集 API 网络安全
Python Requests代理使用入门指南
《Python Requests 代理使用入门指南》将带你深入了解如何使用Python Requests库来配置HTTP代理,并灵活处理各种权限和服务器响应问题。从代理服务器的基础知识,到代理认证与授权设置,本指南为初学者提供了全面的教学内容。
543 7
Python Requests代理使用入门指南
|
关系型数据库 MySQL
MySQL——增量备份和全量备份
MySQL——增量备份和全量备份
223 0