异地备份的核心价值
很多织梦站长只在本地保留 data/backupdata 目录的备份,一旦服务器磁盘损坏、被勒索病毒加密或机房整体故障,备份与业务数据同归于尽。异地备份把数据副本传输到独立机房或对象存储,是抵御机房级故障、勒索软件、误操作删除的最后防线。本文给出一份可在生产环境直接落地的脚本化方案。
备份策略设计
遵循 3-2-1 原则
- 3 份数据:生产一份、本地备份一份、异地一份。
- 2 种介质:服务器磁盘 + 对象存储(OSS/S3)。
- 1 份异地:跨机房或跨云厂商存放。
频率与保留周期
| 类型 | 频率 | 保留 |
|---|---|---|
| 全量备份 | 每日凌晨 02:00 | 30 天 |
| 增量 binlog | 实时同步 | 7 天 |
| 月度归档 | 每月 1 号 | 12 个月 |
步骤一:编写本地备份脚本
在 Web 服务器上创建 /opt/dede_backup.sh,使用 mysqldump 导出全库并打包静态资源。
#!/bin/bash
# /opt/dede_backup.sh
set -e
DATE=$(date +%Y%m%d_%H%M)
HOST=10.0.0.6
USER=dede_backup
PASS='Backup!Pwd#2024'
DB=dedecms
BK_DIR=/data/backup/mysql
WEB_DIR=/www/wwwroot/dedecms
mkdir -p $BK_DIR
# 导出数据库,使用事务一致性
mysqldump -h$HOST -u$USER -p"$PASS" --single-transaction --routines \
--default-character-set=utf8 $DB | gzip > $BK_DIR/${DB}_$DATE.sql.gz
# 打包静态附件目录
tar -czf $BK_DIR/uploads_$DATE.tar.gz -C $WEB_DIR/uploads
# 保留最近 30 天本地备份
find $BK_DIR -type f -mtime +30 -delete
echo "[$DATE] 本地备份完成" >> /var/log/dede_backup.log
脚本中账号建议单独创建只读备份账号
GRANT SELECT, LOCK TABLES, RELOAD, REPLICATION CLIENT,不要复用业务账号。步骤二:异地同步到对象存储
把本地备份推送到阿里云 OSS 或 AWS S3,实现跨机房异地保存。以 ossutil 为例:
# 安装 ossutil 后配置 endpoint 与 AK
ossutil config -e oss-cn-hangzhou.aliyuncs.com \
-i LTAI5txxxx -k AbcdEFxxxx
# 上传当天备份(自动覆盖同名)
DATE=$(date +%Y%m%d_%H%M)
ossutil cp /data/backup/mysql/dedecms_$DATE.sql.gz \
oss://dede-backup/mysql/$(date +%Y)/$(date +%m)/dedecms_$DATE.sql.gz
# 设置生命周期:30 天后转 IA,90 天后删除
ossutil api PutBucketLifecycle --bucket dede-backup ...
同时建议向第二家云厂商再同步一份,例如用 rclone 把 OSS 镜像到七牛或腾讯云 COS:
rclone sync /data/backup/mysql qiniu:dede-mirror --transfers 4
步骤三:配置计划任务
# crontab -e
0 2 * * * /bin/bash /opt/dede_backup.sh >> /var/log/dede_backup.log 2>&1
0 3 * * * /usr/bin/rclone sync /data/backup/mysql qiniu:dede-mirror
# 每周日凌晨执行一次恢复演练
0 4 * * 0 /bin/bash /opt/dede_restore_test.sh
步骤四:恢复演练
有备份不等于能恢复,必须定期演练。在测试机执行:
- 从 OSS 拉取最新备份包解压。
- 新建空数据库
dedecms_test。 - 导入 SQL:
zcat dedecms_xxx.sql.gz | mysql -u root -p dedecms_test。 - 切换织梦配置指向测试库,访问首页验证栏目与文章数量。
- 记录耗时与异常,作为 SLA 依据。
注意事项
- 备份脚本密码不要硬编码,改用
~/.my.cnf或凭据管理服务。 - 备份完成后用
md5sum校验完整性并写入日志,避免传输截断。 - 异地通道启用 TLS,OSS 桶开启服务端加密与版本控制。
- binlog 增量与全量配合,可把 RPO 压到分钟级。
- 定期删除测试库中的演练数据,防止泄露。
行动指引
建议今天就为织梦站点跑通一次完整备份链路:先写本地脚本,再接 OSS,最后在测试机演练一次恢复。把脚本接入监控,备份失败立即告警;把恢复耗时记录在运维手册,灾时才能从容应对。一份可恢复的异地备份,是织梦站点留给未来自己的安全垫。