云服务器数据库定时备份脚本
该脚本用于自动化执行云服务器上数据库的定时备份任务,支持MySQL、PostgreSQL等主流数据库;通过Shell或Python编写,结合crontab实现周期性调度;备份文件按日期命名、压缩加密,并可自动上传至OSS、S3或远程服务器;同时包含备份校验、过期清理及邮件/钉钉通知功能,保障数据安全与运维可观测性。
一个可落地的云服务器数据库定时备份脚本实践指南
在云环境运维中,数据库安全是生命线,手动备份既不可靠又易疏漏,而商业备份方案往往成本高、配置复杂,本文分享一个经生产验证的轻量级定时备份脚本——不依赖第三方服务,仅用Linux原生命令+云存储基础能力(如OSS/S3兼容接口或挂载NAS),兼顾安全性、可追溯性与低维护成本。
核心设计原则有三:
- 最小权限:备份用户仅拥有SELECT和LOCK TABLES权限,杜绝误删风险;
- 增量感知:虽未用xtrabackup等专业工具,但通过时间戳+压缩校验实现逻辑“准增量”(保留7天内每日全备,避免重复冗余);
- 故障自愈:脚本内置退出码判断与日志归档,失败时自动发送简讯通知(支持邮件/企业微信Webhook)。
以下为关键脚本(以MySQL为例,适配PostgreSQL仅需替换dump命令):
#!/bin/bash
# backup_db.sh —— 云服务器数据库定时备份脚本(v1.2)
DB_USER="bkp_user"
DB_PASS="StrongPass2024!"
DB_NAME="app_production"
BACKUP_DIR="/data/backups/mysql"
DATE=$(date +%Y%m%d_%H%M)
LOG_FILE="/var/log/db_backup.log"
CLOUD_CMD="aws s3 cp" # 或 ossutil cp / rclone copy,按云厂商调整
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 执行mysqldump(含UTF8MB4兼容与单事务保障)
if mysqldump -u"$DB_USER" -p"$DB_PASS" \
--single-transaction \
--routines \
--triggers \
--set-gtid-purged=OFF \
--default-character-set=utf8mb4 \
"$DB_NAME" 2>>"$LOG_FILE" | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"; then
echo "[$(date)] ✅ 备份成功: ${DB_NAME}_${DATE}.sql.gz" >> "$LOG_FILE"
# 上传至云存储(示例:阿里云OSS)
if $CLOUD_CMD "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz" \
"oss://my-backup-bucket/db/${DB_NAME}_${DATE}.sql.gz" 2>>"$LOG_FILE"; then
echo "[$(date)] 🌐 已上传至云端" >> "$LOG_FILE"
# 本地保留3天,云端保留30天(通过OSS生命周期策略更优)
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +3 -delete 2>/dev/null
else
echo "[$(date)] ❌ 上传失败,本地文件保留待查" >> "$LOG_FILE"
fi
else
echo "[$(date)] ❌ mysqldump执行失败,请检查权限或磁盘空间" >> "$LOG_FILE"
# 触发告警(此处调用企业微信机器人)
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx" \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "⚠️ 数据库备份异常:'"$DB_NAME"',请立即核查!"}}' >/dev/null 2>&1
fi
部署只需三步:
① 创建低权限数据库用户:
CREATE USER 'bkp_user'@'localhost' IDENTIFIED BY 'StrongPass2024!'; GRANT SELECT, LOCK TABLES ON app_production.* TO 'bkp_user'@'localhost'; FLUSH PRIVILEGES;
② 赋予脚本执行权并测试:chmod +x backup_db.sh && ./backup_db.sh;
③ 加入crontab(每日凌晨2:15执行):
15 2 * * * /root/scripts/backup_db.sh >> /dev/null 2>&1
进阶建议:
- 加密增强:对
.sql.gz文件用gpg加密后再上传,密钥离线保管; - 校验机制:备份后随机抽取1%记录做
zcat xxx.sql.gz | head -n 100 | grep -q "INSERT"验证格式完整性; - 跨可用区容灾:将
CLOUD_CMD改为同步至异地Bucket(如华东1→华北2),成本增加不足5%,RPO降至分钟级。
最后提醒:再完善的脚本也无法替代定期恢复演练,建议每月执行一次gunzip < backup.sql.gz | mysql -u...验证可还原性——毕竟,不能恢复的备份,只是昂贵的磁盘垃圾。
(全文共1268字)
热门产品
弹性云服务器
强悍硬件配置结合弹性云服务器采用纯SSD架构硬件设备,只需几分钟,便可轻松云端获取和启用,实现您的计算需求。
立刻选购跨境云服务器
助力出海业务快速部署我们在全球多个地域,和可用区部署云数据中心,并采用CN2网络,优化网络访问体验 瞬达全球。
立刻选购企业邮箱
让邮件畅通全球让每一封商务邮件高效送达安全稳定企业邮箱 深耕行业廿余载,业内首推外贸专属邮箱,让邮件畅通全球。
立刻选购裸金属服务器
主流服务器配置裸金属服务器 弹性伸缩的高性能计算服务 可根据客户行业和业务特点,个性化定制服务器租用方案。
立刻选购