Windows可通过任务计划程序每天凌晨2点自动执行Python备份脚本,调用mysqldump导出MySQL数据库为SQL文件,压缩为ZIP并清理30天前旧备份,全程仅用系统自带工具。

你需要让Windows每天凌晨2点自动执行一个Python脚本,完成MySQL数据库的备份并压缩归档,同时清理30天前的旧备份文件——不用守着电脑,不依赖第三方服务,只用系统自带工具就能稳定运行。
准备可执行的备份脚本
新建一个名为backup_db.py的文件,用记事本或VS Code打开,粘贴以下内容(注意替换host、db_name、db_user_name、db_user_pwd为你的真实数据库信息):
```python
# -*- coding: utf-8 -*-
import os
import zipfile
from datetime import date, datetime
import re
print("开始备份数据库")
cur_date = date.today().strftime("%Y%m%d")
host = "localhost"
db_name = "your_database_name"
db_user_name = "root"
db_user_pwd = "your_password"
backup_dir = r"E:\DataBaseBackup\mysql"
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
file_name = os.path.join(backup_dir, f"{cur_date}.sql")
zip_file_name = os.path.join(backup_dir, f"{cur_date}.zip")
# 调用mysqldump(确保路径正确或已加入环境变量)
run_backup = f'mysqldump.exe --host={host} --user={db_user_name} --password={db_user_pwd} --default-character-set=utf8 {db_name} > "{file_name}"'
os.system(run_backup)
if os.path.exists(file_name):
with zipfile.ZipFile(zip_file_name, "w", zipfile.ZIP_DEFLATED) as myzip:
myzip.write(file_name)
os.remove(file_name)
print("备份压缩完成")
else:
print("备份失败:mysqldump未生成SQL文件,请检查MySQL服务和权限")
# 清理30天前的zip文件
max_days = 30
for f in os.listdir(backup_dir):
if f.endswith(".zip") and len(f) == 13: # 格式如20261022.zip
try:
str_date = f[:8]
dt = datetime.strptime(str_date, "%Y%m%d")
if (datetime.now() - dt).days > max_days:
os.remove(os.path.join(backup_dir, f))
except:
pass
```
【关键前提】确保mysqldump.exe在系统PATH中,或把完整路径(如D:\MySQL\bin\mysqldump.exe)写进脚本里的run_backup变量。否则脚本会静默失败,只生成空.sql文件。
立即学习“Python免费学习笔记(深入)”;
配置任务计划程序
按下 Win + R → 输入 taskschd.msc → 回车,打开任务计划程序。
在右侧操作面板点击 “创建基本任务…”,按向导顺序操作:
① 输入名称:例如MySQL每日备份;描述可填“凌晨2点自动备份并清理过期文件”。
② 触发器选“每天” → 开始时间为02:00:00 → 频率为1天。
③ 操作选“启动程序” → 程序/脚本栏填写你的python.exe绝对路径(不是脚本路径!),例如:
C:\Users\Alice\AppData\Local\Programs\Python\Python39\python.exe
④ 添加参数(可选)栏填写backup_db.py的完整路径,例如:
E:\Scripts\backup_db.py
⑤ 起始于(可选)栏填写脚本所在目录,例如:
E:\Scripts\
Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。
这一步必须填对起始目录,否则脚本里用os.chdir()或相对路径会找不到backup_dir或报错找不到模块。
设置高权限与兼容性
回到任务计划程序主界面,在左侧导航栏点击“任务计划程序库” → 找到刚创建的任务 → 右键→“属性”。
切换到“常规”选项卡:
✔ 勾选“不管用户是否登录都要运行”
✔ 勾选“不存储密码。只在用户登录时运行” → 改为“只在用户登录时运行”(避免弹出UAC提示)
✔ 在“配置为”下拉菜单中选择你当前系统的Windows版本(如Windows 10)
切换到“条件”选项卡:
取消勾选“只有在计算机使用交流电源时才启动此任务”(笔记本用户注意)
取消勾选“只有在计算机处于空闲状态时才启动此任务”
【不可逆操作】点击“确定”时若弹出密码框,必须输入当前用户密码——这是Windows强制要求,用于授予任务以用户权限访问MySQL和文件系统,跳过则任务无法执行数据库操作。
测试与验证执行结果
右键刚建好的任务 → 选择“运行”,立即触发一次。
等待约10秒后,前往你脚本中设定的backup_dir目录(如E:\DataBaseBackup\mysql),检查:
• 是否生成了形如20261022.zip的压缩包
• 压缩包能否正常解压出SQL文件
• 任务计划程序右侧“历史记录”窗格中,最近几行是否显示“已启动” → “已启动操作” → “操作已成功完成”
如果看到“操作已失败”且日志里有“拒绝访问”或“系统找不到指定文件”,说明python.exe路径、脚本路径或mysqldump路径至少有一处错误,需返回上一步修正。

















