目 录
一、为什么需要「数据基线」这份文档
1.1 当前基线快照(2026-10 权威版)
1.2 勘误表:5 处过期信息的处理
二、备份体系:从三个路径到一条 cron
2.1 备份四件套与脚本要点
2.2 恢复三场景
2.3 备份健康检查(每周)
三、一键巡检脚本:把第 5 篇的验收标准变成日常
3.1 巡检节拍建议
四、知识库文档体系:按场景找文档
4.1 基线快照的复现原则
五、系列收官:九篇走过的一条路
一、为什么需要「数据基线」这份文档
系统上线后最大的坑不是故障,而是「文档说的和系统实际不一样」:旧文档写着 65 MB / 77 个模块,实际已是 68 MB / 78 个;旧文档说「数据为空」,实际已有 20 张销售单、43 张凭证。拿着过期数字做判断(比如估算磁盘、评估迁移工作量),错得莫名其妙。
解法是「双文档管理法」:方法论文档(怎么部署、怎么配置、怎么操作)和现状快照文档(现在是什么样)分开维护。方法论长期有效、很少改;现状快照定期更新、以它为唯一权威。旧文档不删不改——里面的配置方法、源码链路分析依然准确——只在快照里挂勘误表修正数据认知。
1.1 当前基线快照(2026-10 权威版)
|
项目 |
当前值 |
|
主机 / IP |
odoo / 10.10.10.253,Rocky 9.8 |
|
Odoo / Python / DB |
18.0 社区版 / 3.11 venv / PostgreSQL 13.23 |
|
数据库大小 / 模块数 |
68 MB / 78 个(旧记载 65 MB / 77 已过期) |
|
业务数据 |
18 商品 / 8 客户 / 3 供应商 / 20 销售单 / 6 采购单 / 26 出入库 / 11 批次 / 8 会员卡 / 43 凭证 |
|
财务配置 |
cn 科目表 / FIFO / real_time / 三科目 140500·140201·540100 |
|
试算平衡 |
借 91,585.78 = 贷 91,585.78(平衡) |
|
库存总值 |
约 25,884 元(12 商品有库存) |
|
磁盘 |
46G 总量,已用 6.2G(14%),可用 39G |
|
🔴 待处理业务 |
临期批次 CHICKEN-20261010:11-23 过期、182 袋,需促销或报损 |
1.2 勘误表:5 处过期信息的处理
勘误表是快照文档的灵魂。5 处过期信息里最典型的一条:配置文档曾写「库存预警定时任务不存在」,基于当时的源码分析是对的,但后来补建了自定义 cron(id=27「库存:批次保质期到期预警」,每日执行)——原结论按现状失效,勘误表必须记一笔,否则后人排查预警问题时会被误导。
|
# |
过期内容 |
当前实际 |
|
1 |
库 65 MB / 77 模块 |
68 MB / 78 模块 |
|
2 |
「基础数据仍为空」 |
已有 7 用户、18 商品、20 销售单等 |
|
3 |
「效期预警 cron 不存在」 |
已建自定义 cron id=27,每日执行 |
|
4 |
备份路径三处三个说法 |
统一为 /opt/odoo/backup/(自动在 auto/ 子目录) |
|
5 |
只有手工备份 |
已落地自动备份,每日 02:00 保留 7 天 |
处理原则:旧文档不删不改,方法依然有效;数字以快照为准。这样既不丢内容,又不误导读者。
二、备份体系:从三个路径到一条 cron
改造前的状态很典型:三份文档写了三个不同的备份路径,且从未落地成定时任务——数据库里已有真实业务数据,一旦出事只能靠手工 dump。改造后收敛为一张表:
|
项目 |
值 |
|
脚本 / 定时任务 |
/usr/local/bin/odoo-backup.sh + /etc/cron.d/odoo-backup |
|
执行时间 / 保留 |
每日 02:00 / 7 天 |
|
备份目录 |
/opt/odoo/backup/auto/<时间戳>/ |
|
日志 / 单次体积 |
/var/log/odoo-backup.log / 约 12 MB(7 天约 84 MB) |
2.1 备份四件套与脚本要点
四件套:db_odoo.dump(pg_dump -Fc 全量)、filestore_odoo.tar.gz(附件图片)、odoo.conf、脚本自身。脚本五个环节各有校验,节选关键判断:
# 1. 数据库:pg_dump -Fc,文件 <100KB 视为异常(防止空 dump 冒充成功)
if [ "$SZ" -lt 102400 ]; then log "ERROR: 备份文件异常小"; exit 1; fi
# 4. 完整性校验(备份不校验 = 没备份)
pg_restore –list "

DB.dump" > /dev/null 2>>"$LOG" \\
&& log "数据库备份校验通过" || { log "ERROR: 校验失败"; exit 1; }
gzip -t "

DB.tar.gz" && log "filestore 校验通过"
# 5. 清理 7 天前备份(find -mtime +7)
⚠️ 三个部署注意点:/etc/cron.d/ 下的文件必须 644 且属主 root,否则 cron 静默忽略(不报错,最难排查);filestore 必须备(22 MB 原始压缩后 4.8 MB),只备库丢了附件图片;数据库文件小于 100 KB 视为失败,防止空 dump 冒充成功。
2.2 恢复三场景
- 场景 A 查历史数据:pg_restore 恢复到临时库 odoo_restore_test,查完 dropdb,全程不动生产库。
- 场景 B 整库回滚(需停机):stop odoo → 先把当前的坏数据 dump 保住(别直接覆盖)→ dropdb → createdb → pg_restore → 恢复 filestore 并 chown odoo → start odoo。
- 场景 C 只恢复误删附件:解包 filestore 到 /tmp,cp -n 单个文件回 filestore 对应子目录,chown 后重启。
2.3 备份健康检查(每周)
ls -lht /opt/odoo/backup/auto/ | head -5 # 最近 3 次备份
tail -20 /var/log/odoo-backup.log # 最近执行日志
find /opt/odoo/backup/auto -maxdepth 1 -type d -name "2*" | wc -l # 应 = 7
LATEST=$(ls -d /opt/odoo/backup/auto/2*/ | tail -1)
pg_restore –list "$LATEST/db_odoo.dump" > /dev/null && echo "最新备份可读"
⚠️ 备份不等于能恢复。建议每季度做一次场景 A 演练,确认备份真的能用——这是唯一被验证过的备份。
三、一键巡检脚本:把第 5 篇的验收标准变成日常
第 5 篇初始化时的四类验收(数据量、单据状态、试算平衡、临期扫描),就是上线后的巡检标准。把检查固化成 /usr/local/bin/odoo-check.sh,随时跑、五段输出:
# 一、服务状态:odoo / postgresql / nginx 是否 active
# 二、资源:内存、根分区使用率
# 三、备份新鲜度:最新备份 <30 小时为新鲜,否则检查 cron
# 四、业务数据:五类单据计数 + 试算平衡 + 临期批次扫描
# 五、定时任务:备份 cron 规则数 + Odoo 活跃 cron 数
其中「业务数据」段直接复用第 5 篇的核查脚本(五类计数、借贷平衡、60 天内临期批次扫描,临期行格式:批次号 / 产品 / 库存量 / 剩余天数)。巡检原则:脚本退出即给结论,不靠人记判断标准;任何一段出现 ❌ 都要有对应的处置动作(服务挂了重启、备份过期查 cron、不平衡查未过账单据)。
3.1 巡检节拍建议
|
频率 |
动作 |
|
每次改动后 |
跑一遍 odoo-check.sh 确认无 ❌ |
|
每周 |
备份健康检查四条命令(2.3 节) |
|
每月 1 号 |
备份后做月末结账五项(第 7 篇 7.2 节) |
|
每季度 |
场景 A 恢复演练一次 + 权限审计(第 6 篇 6.2 节) |
四、知识库文档体系:按场景找文档
本系列对应的知识库共 9 份文档,按「我要做什么」组织索引:
|
我要… |
看哪份 |
|
知道系统现在有什么数据 |
数据基线(本文的底稿,唯一权威) |
|
从零装一台 Odoo |
odoo18-rocky9-source-deploy.md |
|
配模块 / 保质期 / 积分 |
odoo18-宠物用品-保质期预警与会员积分配置.md |
|
教员工操作系统 |
odoo18-员工日常操作手册SOP.md |
|
开账号配权限 |
odoo18-账号权限规划与验证.md |
|
造业务数据 |
odoo18-业务数据初始化实录.md |
|
查财务 / 估值问题 |
odoo18-财务配置与库存估值踩坑.md |
|
修 PDF 打印 |
odoo18-b5-wkhtmltopdf安装与验证.md |
|
离线复现安装 |
安装包归档说明.md |
按角色推荐:系统管理员读 基线 → 部署 → 权限 → 本篇;会计读 基线 1.4 节 → SOP 会计章 → 财务配置;销售 / 仓管 / 客服只看 SOP 对应章节;实施顾问按 部署 → 配置 → 数据 → 财务 → 权限 全序读。
4.1 基线快照的复现原则
快照里每个数字都必须可用一段脚本复现(odoo shell 一段查全:十类数据计数、库大小 pg_database_size、模块数、试算平衡、库存总值)。这一条是双文档管理法能运转的前提:数字可复现,快照更新才是机械劳动而不是重新排查;怀疑快照过期时,跑一遍脚本就知道。
五、系列收官:九篇走过的一条路
从第 0 篇的选型判断,到本篇的日常运维,这条线走完了:
|
篇目 |
里程碑 |
|
第 0 篇 |
想清楚为什么:一体化 ERP vs 散装工具,选 Odoo 18 的四个理由 |
|
第 1 篇 |
装起来:Rocky 9 源码部署,systemd 托管,八项验收通过 |
|
第 2 篇 |
修第一个硬伤:wkhtmltopdf 假 URL 排障,PDF 报表恢复 |
|
第 3 篇 |
配业务:模块选型、保质期预警、会员积分(applies_on = future) |
|
第 4 篇 |
打地基:cn 科目表、FIFO + real_time,出项科目救利润表 |
|
第 5 篇 |
造数据:18 商品 / 20 单 / 11 批次 / 43 凭证,一致性验证通过 |
|
第 6 篇 |
管权限:6 岗位三层权限,越权提权全部被拒 |
|
第 7 篇 |
用起来:六岗位 SOP,跨岗位接力一次真实交易 |
|
第 8 篇 |
守下去:数据基线 + 勘误表 + 自动备份 + 一键巡检 |
回看全程,三条经验贯穿始终:其一,系统不难装,难的是「配置文档的准确性」——本系列踩的最大的坑都是文档坑(假 URL、不存在的菜单、过期的数字),所以坚持每篇只写实测通过的内容;其二,业务规则先于技术配置(先到期先出 → FIFO → 批次纪律 → 临期处理流程),技术只是规则的执行者;其三,上线不是终点——基线快照、自动备份、季度演练才是系统能长期活下去的保障。
后续可选的延伸方向:备份恢复的完整演练实录(把场景 A/B 真跑一遍)、多公司 / 多仓库扩展、以及与 AI 运维工具联动的值守告警——有需要再成篇。




