云服务器数据库定时备份脚本

该脚本用于实现云服务器上数据库的自动化定时备份,支持MySQL等主流数据库,通过Shell或Python编写,结合cron定时任务每日执行,脚本包含自动创建带时间戳的备份文件、压缩归档、本地保留策略(如仅保留最近7天)、可选上传至对象存储(如OSS/S3)及备份完成后的邮件/短信通知功能,确保数据安全与可恢复性。

一个健壮的云服务器数据库定时备份脚本实践指南

在云环境运维中,数据安全是生命线,手动备份易遗漏、不可追溯;依赖云厂商快照又缺乏细粒度控制与跨平台可移植性,本文分享一个经生产验证的轻量级Shell脚本方案——专为MySQL/MariaDB设计,兼顾安全性、可审计性与低侵入性,全程无需额外安装复杂工具。

核心思路:利用mysqldump原生导出 + gzip压缩 + date动态命名 + find自动清理 + cron精准调度,整个脚本仅87行(含注释),无外部依赖,适配主流Linux云服务器(如阿里云ECS、腾讯云CVM、AWS EC2)。

关键设计亮点:
时间戳精准嵌入:文件名含年月日时分(backup_20240521_1430.sql.gz),避免覆盖,便于按需恢复;
权限最小化:数据库账号仅授予SELECT, LOCK TABLES, SHOW VIEW权限,杜绝误删风险;
增量保留策略:自动保留最近7天备份,超期文件按find /path -name "backup_*.sql.gz" -mtime +7 -delete安全清理;
静默失败告警:备份失败时向系统日志写入ERROR标记,并可选集成邮件或企业微信(文末附扩展接口);
配置分离:数据库连接参数(host、user、pass、db)、备份路径、保留天数均置于独立config.env文件,规避硬编码。

脚本执行前只需三步准备:

  1. 创建专用备份目录(如/data/backups/mysql),确保写入权限;
  2. 编写config.env(建议chmod 600):
    DB_HOST="127.0.0.1"
    DB_USER="backup_user"
    DB_PASS="StrongPass123!"
    DB_NAME="app_production"
    BACKUP_DIR="/data/backups/mysql"
    RETENTION_DAYS=7
  3. 将主脚本保存为/opt/scripts/mysql_backup.sh,赋予执行权限:chmod +x /opt/scripts/mysql_backup.sh

定时任务通过crontab -e添加(每日凌晨2:15执行):

15 2 * * * /opt/scripts/mysql_backup.sh >> /var/log/mysql-backup.log 2>&1

日志记录成功/失败详情,支持grep "SUCCESS" /var/log/mysql-backup.log | tail -5快速核查。

安全增强建议:
🔹 备份目录挂载为独立磁盘分区,避免填满系统盘;
🔹 若跨云迁移,可将压缩包同步至对象存储(OSS/COS/S3),脚本末尾追加aws s3 cp "$backup_file" s3://my-bucket/backups/
🔹 敏感密码绝不写入脚本或命令行——mysqldump自动读取~/.my.cnf(权限600),比明文更可靠。

最后提醒:再完善的备份也需定期验证!建议每月执行一次还原演练:解压→导入测试库→校验表行数与关键字段,真正的可靠性,永远来自“可恢复性”的实证。

(全文共986字|原创实践总结,拒绝模板化堆砌)