前言
数据备份是运维中最重要但最容易被忽视的环节。对于 OpenClaw 来说,配置文件、技能插件、对话历史等数据一旦丢失,恢复成本极高。本教程将详细介绍需要备份哪些数据、如何实现自动化备份、以及灾难恢复和服务器迁移的完整流程。
需要备份的数据
数据清单
| 数据类型 | 存储位置 | 重要程度 | 大小估计 |
|---|---|---|---|
| 主配置文件 | ~/.config/openclaw/openclaw.json5 |
极高 | < 10 KB |
| 技能文件 | ~/.openclaw/skills/*.md |
高 | 每个 1-50 KB |
| 对话历史 | ~/.openclaw/data/conversations/ |
中 | 视使用量而定 |
| MCP 配置 | ~/.openclaw/mcp/ |
高 | < 100 KB |
| 用户数据 | ~/.openclaw/data/users/ |
中 | 视用户数而定 |
| 日志文件 | ~/.openclaw/logs/ |
低 | 可能较大 |
| SSL 证书 | /etc/letsencrypt/ 或自定义路径 |
高 | < 100 KB |
| 环境变量 | ~/.bashrc 或 ~/.env |
极高 | < 5 KB |
最小备份集
如果存储空间有限,至少备份以下内容:
~/.config/openclaw/openclaw.json5 # 主配置
~/.openclaw/skills/ # 所有技能
~/.openclaw/mcp/ # MCP 配置
有了这三项,即使其他数据丢失,也能快速恢复核心功能。
第一步:手动备份
1.1 一键备份脚本
创建一个简单的备份脚本:
nano ~/openclaw-backup.sh
写入以下内容:
#!/bin/bash
# OpenClaw 备份脚本
# 配置
BACKUP_DIR="$HOME/openclaw-backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="openclaw-backup-${DATE}.tar.gz"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 需要备份的路径
PATHS=(
"$HOME/.config/openclaw"
"$HOME/.openclaw/skills"
"$HOME/.openclaw/mcp"
"$HOME/.openclaw/data"
)
# 可选:备份环境变量(仅包含 OPENCLAW 相关的)
ENV_FILE="/tmp/openclaw-env-${DATE}.txt"
env | grep -E '^(OPENCLAW_|OPENAI_|ANTHROPIC_|GOOGLE_AI_|DEEPSEEK_|OPENROUTER_)' > "$ENV_FILE"
# 创建压缩备份
echo "开始备份..."
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" \
"${PATHS[@]}" \
"$ENV_FILE" \
2>/dev/null
# 清理临时文件
rm -f "$ENV_FILE"
# 计算备份大小
SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1)
echo "备份完成:"
echo " 文件:${BACKUP_DIR}/${BACKUP_FILE}"
echo " 大小:${SIZE}"
# 保留最近 30 个备份,删除更旧的
cd "$BACKUP_DIR"
ls -t openclaw-backup-*.tar.gz | tail -n +31 | xargs -r rm
echo "已清理过期备份"
设置权限并运行:
chmod +x ~/openclaw-backup.sh
~/openclaw-backup.sh
1.2 验证备份
# 查看备份内容
tar -tzf ~/openclaw-backups/openclaw-backup-*.tar.gz | head -20
# 检查文件完整性
tar -tzf ~/openclaw-backups/openclaw-backup-*.tar.gz > /dev/null && echo "备份文件完整" || echo "备份文件损坏"
第二步:自动化备份
2.1 使用 Cron 定时备份
crontab -e
添加以下条目:
# 每天凌晨 2 点自动备份 OpenClaw
0 2 * * * /home/your-user/openclaw-backup.sh >> /var/log/openclaw-backup.log 2>&1
# 每周日凌晨 3 点创建完整备份(包含日志)
0 3 * * 0 /home/your-user/openclaw-backup-full.sh >> /var/log/openclaw-backup.log 2>&1
2.2 完整备份脚本(含日志和对话历史)
nano ~/openclaw-backup-full.sh
#!/bin/bash
# OpenClaw 完整备份脚本(周度)
BACKUP_DIR="$HOME/openclaw-backups/weekly"
DATE=$(date +%Y%m%d)
BACKUP_FILE="openclaw-full-${DATE}.tar.gz"
mkdir -p "$BACKUP_DIR"
# 暂停 OpenClaw 以确保数据一致性
echo "暂停 OpenClaw 服务..."
openclaw restart
# 等待服务完全停止
sleep 5
# 完整备份
echo "开始完整备份..."
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" \
"$HOME/.config/openclaw" \
"$HOME/.openclaw" \
2>/dev/null
# 恢复 OpenClaw 服务
echo "恢复 OpenClaw 服务..."
openclaw up -d
SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1)
echo "完整备份完成:${SIZE}"
# 保留最近 12 周的备份
cd "$BACKUP_DIR"
ls -t openclaw-full-*.tar.gz | tail -n +13 | xargs -r rm
chmod +x ~/openclaw-backup-full.sh
2.3 备份到远程存储
本地备份不够安全,建议同步到远程:
方法一:rsync 同步到另一台服务器
# 在备份脚本末尾添加
rsync -avz --delete \
"$BACKUP_DIR/" \
backup-user@backup-server:/backups/openclaw/
方法二:上传到 S3 兼容存储
# 安装 AWS CLI 或兼容工具
# apt install awscli
# 在备份脚本末尾添加
aws s3 cp "${BACKUP_DIR}/${BACKUP_FILE}" \
s3://your-backup-bucket/openclaw/ \
--storage-class STANDARD_IA
方法三:上传到 Google Drive / OneDrive
# 使用 rclone
# apt install rclone
# rclone config (首次需要配置)
rclone copy "${BACKUP_DIR}/${BACKUP_FILE}" \
gdrive:Backups/openclaw/
2.4 备份通知
在备份脚本中添加通知功能:
# 通过 OpenClaw 自身发送备份通知(如果配置了 Telegram)
notify_backup() {
local status=$1
local message=$2
curl -s -X POST "http://localhost:18789/api/notify" \
-H "Content-Type: application/json" \
-d "{\"channel\": \"telegram\", \"user\": \"${ADMIN_TELEGRAM_ID}\", \"message\": \"${message}\"}"
}
# 在备份成功后调用
notify_backup "success" "OpenClaw 每日备份完成,大小:${SIZE}"
# 在备份失败时调用
if [ $? -ne 0 ]; then
notify_backup "error" "OpenClaw 备份失败,请检查日志"
fi
第三步:数据恢复
3.1 恢复流程
当需要从备份恢复时,按以下步骤操作:
# 第一步:停止 OpenClaw
openclaw restart
# 第二步:备份当前数据(以防万一)
mv ~/.config/openclaw ~/.config/openclaw.broken
mv ~/.openclaw ~/.openclaw.broken
# 第三步:解压备份文件
cd /
tar -xzf ~/openclaw-backups/openclaw-backup-20260404_020000.tar.gz
# 第四步:恢复环境变量(如果备份中包含)
cat /tmp/openclaw-env-*.txt
# 手动将需要的环境变量添加到 ~/.bashrc
# 第五步:重新加载环境变量
source ~/.bashrc
# 第六步:启动 OpenClaw
openclaw up -d
# 第七步:验证
openclaw doctor
3.2 部分恢复
如果只需要恢复特定数据:
# 只恢复配置文件
tar -xzf backup.tar.gz --include='*openclaw.json5' -C /
# 只恢复技能文件
tar -xzf backup.tar.gz --include='*skills/*' -C /
# 只恢复 MCP 配置
tar -xzf backup.tar.gz --include='*mcp/*' -C /
3.3 查看备份中的文件
在恢复前先检查备份内容:
# 列出备份中的所有文件
tar -tzf backup.tar.gz
# 查看特定文件的内容(不解压)
tar -xzf backup.tar.gz -O home/user/.config/openclaw/openclaw.json5
第四步:服务器迁移
4.1 迁移前准备
在旧服务器上:
# 创建完整备份
~/openclaw-backup-full.sh
# 记录当前版本
openclaw --version > ~/openclaw-version.txt
# 记录 Node.js 版本
node --version >> ~/openclaw-version.txt
# 导出环境变量
env | grep -E '^(OPENCLAW_|OPENAI_|ANTHROPIC_|GOOGLE_AI_|DEEPSEEK_|OPENROUTER_|TELEGRAM_|DISCORD_)' > ~/openclaw-env-export.txt
4.2 在新服务器上恢复
# 第一步:安装 Node.js 22+
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -
sudo apt install -y nodejs
# 第二步:安装 OpenClaw
npm install -g openclaw@latest
# 第三步:将备份传输到新服务器
scp old-server:~/openclaw-backups/openclaw-full-latest.tar.gz ~/
# 第四步:恢复数据
cd /
tar -xzf ~/openclaw-full-latest.tar.gz
# 第五步:恢复环境变量
scp old-server:~/openclaw-env-export.txt ~/
cat ~/openclaw-env-export.txt >> ~/.bashrc
source ~/.bashrc
# 第六步:运行初始化检查
openclaw doctor
# 第七步:启动服务
openclaw up -d
# 第八步:验证所有频道正常
openclaw logs
4.3 迁移后检查清单
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 服务状态 | openclaw doctor |
全部通过 |
| 配置加载 | openclaw logs |
无错误 |
| 模型连接 | 发送测试消息 | 正常回复 |
| 频道连接 | 各频道发送消息 | 正常收发 |
| 技能加载 | openclaw skill list |
显示所有技能 |
| Dashboard | 浏览器访问 | 正常登录 |
| HTTPS | curl -I https://your-domain |
200 OK |
4.4 DNS 切换
如果使用了自定义域名:
# 更新 DNS A 记录指向新服务器 IP
# 在域名服务商后台操作
# 等待 DNS 传播(通常 5-30 分钟,最长 48 小时)
# 可以用以下命令检查
dig ai.example.com +short
# 确认指向新 IP 后,在新服务器上配置 SSL
sudo certbot certonly --standalone -d ai.example.com
第五步:灾难恢复方案
5.1 3-2-1 备份规则
遵循业界标准的 3-2-1 备份规则:
- 3 份数据副本
- 2 种不同存储介质
- 1 份异地备份
示例方案:
副本 1:服务器本地 ~/openclaw-backups/(每日自动)
副本 2:远程 S3 存储(每日同步)
副本 3:本地 NAS 或移动硬盘(每周手动或自动)
5.2 恢复时间预估
| 恢复场景 | 预估时间 | 操作 |
|---|---|---|
| 配置文件损坏 | 5-10 分钟 | 从备份恢复配置 |
| 技能文件丢失 | 5 分钟 | 从备份恢复技能目录 |
| 整个 .openclaw 丢失 | 15-30 分钟 | 恢复完整备份 |
| 服务器宕机 | 30-60 分钟 | 新服务器 + 备份恢复 |
| 数据中心故障 | 1-2 小时 | 异地恢复 |
5.3 快速恢复脚本
创建一个一键恢复脚本,在灾难发生时快速执行:
nano ~/openclaw-restore.sh
#!/bin/bash
# OpenClaw 一键恢复脚本
set -e
BACKUP_DIR="$HOME/openclaw-backups"
# 找到最新的备份
LATEST_BACKUP=$(ls -t "$BACKUP_DIR"/openclaw-backup-*.tar.gz 2>/dev/null | head -1)
if [ -z "$LATEST_BACKUP" ]; then
echo "错误:未找到备份文件"
exit 1
fi
echo "将从以下备份恢复:"
echo " $LATEST_BACKUP"
echo " 创建时间:$(stat -c %y "$LATEST_BACKUP" 2>/dev/null || stat -f %Sm "$LATEST_BACKUP")"
echo ""
read -p "确认恢复?(y/N) " confirm
if [ "$confirm" != "y" ]; then
echo "已取消"
exit 0
fi
# 停止服务
echo "停止 OpenClaw..."
openclaw restart 2>/dev/null || true
# 备份当前状态
echo "备份当前状态..."
if [ -d "$HOME/.openclaw" ]; then
mv "$HOME/.openclaw" "$HOME/.openclaw.pre-restore.$(date +%s)"
fi
if [ -d "$HOME/.config/openclaw" ]; then
mv "$HOME/.config/openclaw" "$HOME/.config/openclaw.pre-restore.$(date +%s)"
fi
# 恢复
echo "恢复备份数据..."
cd /
tar -xzf "$LATEST_BACKUP"
# 启动服务
echo "启动 OpenClaw..."
source ~/.bashrc
openclaw up -d
# 验证
echo "验证服务状态..."
sleep 3
openclaw doctor
echo ""
echo "恢复完成!"
chmod +x ~/openclaw-restore.sh
备份监控
检查备份是否正常执行
# 查看最新备份的时间
ls -lt ~/openclaw-backups/ | head -5
# 检查备份 cron 日志
tail -20 /var/log/openclaw-backup.log
# 验证备份文件大小(太小可能表示备份不完整)
du -sh ~/openclaw-backups/openclaw-backup-*.tar.gz | tail -5
定期恢复演练
建议每季度进行一次恢复演练,确保备份可用:
# 在测试环境中恢复
mkdir -p /tmp/openclaw-test-restore
cd /tmp/openclaw-test-restore
tar -xzf ~/openclaw-backups/openclaw-backup-latest.tar.gz
echo "恢复测试通过"
rm -rf /tmp/openclaw-test-restore
常见问题
备份文件太大
对话历史可能导致备份文件很大。解决方法:
# 仅备份核心配置,不包含对话历史
tar -czf backup.tar.gz \
~/.config/openclaw \
~/.openclaw/skills \
~/.openclaw/mcp \
--exclude='*.log' \
--exclude='conversations'
恢复后频道无法连接
通常是因为环境变量没有正确恢复。检查:
# 确认关键环境变量存在
echo $TELEGRAM_BOT_TOKEN
echo $OPENAI_API_KEY
如果为空,需要重新设置环境变量。
跨平台迁移(Linux → Linux 不同发行版)
OpenClaw 的数据是跨平台兼容的。只要 Node.js 版本一致(22+),备份文件可以在任何 Linux 发行版上恢复。
小结
数据备份是保障 OpenClaw 稳定运行的最后一道防线。核心建议:使用自动化脚本每日备份,至少保持一份异地备份,定期进行恢复演练。配置文件和技能文件是最关键的备份对象,恢复它们只需几分钟。记住 3-2-1 原则,让你的 AI 助手在任何意外情况下都能快速恢复。