🔧 数据库运维 · 自动化

MySQL 自动备份方案

每天凌晨3点自动备份数据库,保留最近7天备份,超期自动清理。备份文件自动压缩,失败时发送邮件告警。数据库密码通过环境变量配置,安全可靠。

📊 核心指标

备份频率
每天
凌晨 03:00 自动执行
保留周期
7 天
超期自动清理,释放磁盘空间
压缩方式
gzip / zstd
默认 gzip,可选更高压缩率的 zstd
告警方式
邮件通知
备份失败自动发送告警邮件

📁 项目目录结构

📂 mysql_backup/
├── config/
├── .env.example ← 配置模板
└── .env ← 实际配置(需创建)
├── scripts/
├── backup.py ← 核心备份脚本
├── restore_test.py ← 恢复测试脚本
└── setup_scheduled_task.bat ← Windows定时任务
├── backups/ ← 备份文件存放
├── logs/ ← 日志文件
├── test/ ← 测试文件
└── README.md ← 使用文档

🚀 部署步骤

功能特性

🔒

安全配置

数据库密码通过 .env 环境变量配置,不写死在代码中

🗑️

自动清理

只保留最近7天备份,超期自动删除,节省磁盘空间

📦

自动压缩

备份文件自动 gzip 压缩,可选更高压缩率的 zstd

📧

邮件告警

备份失败自动发送告警邮件,支持 QQ/163/Gmail 等邮箱

📋

完整日志

每天独立日志文件,成功失败一目了然

🧪

恢复验证

提供恢复测试脚本,自动验证备份文件可用性

⚙️ 配置文件示例

# MySQL 数据库连接配置
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=backup_user
MYSQL_PASSWORD=your_secure_password
MYSQL_DATABASE=your_database

# 备份存储配置
BACKUP_DIR=./backups
RETENTION_DAYS=7
COMPRESS_METHOD=gzip

# 邮件告警配置(可选)
SMTP_SERVER=smtp.qq.com
SMTP_PORT=465
SMTP_USER=alerts@example.com
SMTP_PASSWORD=your_smtp_password
MAIL_TO=dba@example.com

定时任务配置

Linux (crontab)

# 每天凌晨3点执行备份
0 3 * * * cd /path/to/mysql_backup && /usr/bin/python3 scripts/backup.py

Windows (任务计划)

# 以管理员身份运行 setup_scheduled_task.bat
schtasks /create /tn "MySQLBackup" /tr "python scripts\backup.py" /sc daily /st 03:00 /ru SYSTEM

🧪 恢复测试方法

# 自动恢复测试(找到最新备份 → 恢复到测试库 → 验证 → 清理)
python scripts/restore_test.py

# 手动恢复
gunzip -c backups/mydb_20260717_030001.sql.gz > restore.sql
mysql -h 127.0.0.1 -u root -p your_database < restore.sql