
关于
完整的 Odoo 备份与恢复策略:数据库转储、文件存储备份、自动化调度、云存储上传和经过测试的恢复流程。
name: odoo-backup-strategy description: "完整的 Odoo 备份和恢复策略:数据库转储、文件存储备份、自动化调度、云存储上传和经过测试的恢复流程。" risk: safe source: "self"
Odoo 备份策略
概述
完整的 Odoo 备份必须包含 PostgreSQL 数据库和文件存储(附件、图片)。此技能涵盖手动和自动化备份流程、异地存储,以及将宕机的 Odoo 实例恢复上线的正确恢复顺序。
何时使用此技能
- 为生产 Odoo 实例设置备份策略。
- 使用 shell 脚本和 cron 自动化每日备份。
- 在服务器故障或数据损坏事件后恢复 Odoo。
- 诊断失败的备份或损坏的恢复。
工作原理
- 激活:提及
@odoo-backup-strategy并描述你的服务器环境。 - 生成:获取针对你的设置定制的完整备份脚本。
- 恢复:获取任何故障场景的逐步恢复说明。
示例
示例 1:手动数据库 + 文件存储备份
#!/bin/bash
# backup_odoo.sh
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="odoo"
DB_USER="odoo"
FILESTORE_PATH="/var/lib/odoo/.local/share/Odoo/filestore/$DB_NAME"
BACKUP_DIR="/backups/odoo"
mkdir -p "$BACKUP_DIR"
# 步骤 1:转储数据库
pg_dump -U $DB_USER -Fc $DB_NAME > "$BACKUP_DIR/db_$DATE.dump"
# 步骤 2:归档文件存储
tar -czf "$BACKUP_DIR/filestore_$DATE.tar.gz" -C "$FILESTORE_PATH" .
echo "Backup complete: db_$DATE.dump + filestore_$DATE.tar.gz"
示例 2:使用 Cron 自动化(每天凌晨 2 点)
# 运行:crontab -e
# 添加此行:
0 2 * * * /opt/scripts/backup_odoo.sh >> /var/log/odoo_backup.log 2>&1
示例 3:上传到 S3(备份后)
# 在 tar 命令后添加到备份脚本:
aws s3 cp "$BACKUP_DIR/db_$DATE.dump" s3://my-odoo-backups/db/
aws s3 cp "$BACKUP_DIR/filestore_$DATE.tar.gz" s3://my-odoo-backups/filestore/
# 可选:删除超过 7 天的本地备份
find "$BACKUP_DIR" -type f -mtime +7 -delete
示例 4:完整恢复流程
# 步骤 1:停止 Odoo
docker compose stop odoo # 或:systemctl stop odoo
# 步骤 2:重建并恢复数据库
# (单独使用 --clean 在数据库不存在时会失败;先删除再重建)
dropdb -U odoo odoo 2>/dev/null || true
createdb -U odoo odoo
pg_restore -U odoo -d odoo db_YYYYMMDD_HHMMSS.dump
# 步骤 3:恢复文件存储
FILESTORE=/var/lib/odoo/.local/share/Odoo/filestore/odoo
rm -rf "$FILESTORE"/*
tar -xzf filestore_YYYYMMDD_HHMMSS.tar.gz -C "$FILESTORE"/
# 步骤 4:重启 Odoo
docker compose start odoo
# 步骤 5:验证 — 在浏览器中打开 Odoo 并检查:
# - 能否登录?
# - 最近的记录是否可见?
# - 文件附件是否正常加载?
最佳实践
- 应该:每月在预发布环境中测试恢复 — 从未恢复过的备份不算备份。
- 应该:遵循 3-2-1 规则:3 份副本、2 种不同介质类型、1 份异地副本(如 S3 或远程服务器)。
- 应该:在每次 Odoo 升级前立即备份 — 这是你的回滚点。
- 应该:验证备份完整性:
pg_restore --list backup.dump应无错误完成。 - 不要:只备份数据库而不备份文件存储 — 恢复后所有附件和图片都会丢失。
- 不要:将备份存储在与 Odoo 相同的磁盘或服务器上 — 磁盘或服务器故障会同时摧毁两者。
- 不要:对不存在的数据库运行
pg_restore --clean— 始终先创建数据库。
限制
- 不涵盖 Odoo.sh 内置备份 — Odoo.sh 有自己的备份系统,可从仪表板访问。
- 此脚本假设是单数据库 Odoo 设置。多数据库实例需要循环遍历所有数据库。
- 文件存储路径可能因安装方式不同而异(Docker 卷 vs. 裸机)。恢复前始终使用
odoo-bin shell验证路径。 - 大型文件存储(100GB+)可能需要增量备份工具如
rsync或restic,而非完整的tar.gz归档。
兼容工具
Claude CodeCursor
标签
数据工程
