织梦定期数据库备份到异地

3-2-1 备份原则落地织梦站点,让勒索与误删都有路可退

异地备份的核心价值

很多织梦站长只在本地保留 data/backupdata 目录的备份,一旦服务器磁盘损坏、被勒索病毒加密或机房整体故障,备份与业务数据同归于尽。异地备份把数据副本传输到独立机房或对象存储,是抵御机房级故障、勒索软件、误操作删除的最后防线。本文给出一份可在生产环境直接落地的脚本化方案。

备份策略设计

遵循 3-2-1 原则

  • 3 份数据:生产一份、本地备份一份、异地一份。
  • 2 种介质:服务器磁盘 + 对象存储(OSS/S3)。
  • 1 份异地:跨机房或跨云厂商存放。

频率与保留周期

类型频率保留
全量备份每日凌晨 02:0030 天
增量 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

步骤四:恢复演练

有备份不等于能恢复,必须定期演练。在测试机执行:

  1. 从 OSS 拉取最新备份包解压。
  2. 新建空数据库 dedecms_test
  3. 导入 SQL:zcat dedecms_xxx.sql.gz | mysql -u root -p dedecms_test
  4. 切换织梦配置指向测试库,访问首页验证栏目与文章数量。
  5. 记录耗时与异常,作为 SLA 依据。

注意事项

  • 备份脚本密码不要硬编码,改用 ~/.my.cnf 或凭据管理服务。
  • 备份完成后用 md5sum 校验完整性并写入日志,避免传输截断。
  • 异地通道启用 TLS,OSS 桶开启服务端加密与版本控制。
  • binlog 增量与全量配合,可把 RPO 压到分钟级。
  • 定期删除测试库中的演练数据,防止泄露。

行动指引

建议今天就为织梦站点跑通一次完整备份链路:先写本地脚本,再接 OSS,最后在测试机演练一次恢复。把脚本接入监控,备份失败立即告警;把恢复耗时记录在运维手册,灾时才能从容应对。一份可恢复的异地备份,是织梦站点留给未来自己的安全垫。