用 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 的备份权限,以及备份目录的读写权限。
相关文章
|
12天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
627 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
346 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
356 155