华为 MetaERP 共享模块数据备份与恢复自动化说明本文把「公开可核实的 GaussDB/MetaERP 技术事实」与「面向共享模块的工程设计」分开标注。【事实】​ 华为官方文档 / 公开发表材料明确支持的能力【设计】​ 基于这些能力、针对共享模块费用/应付/应收/核算/档案/稽核的工程组合建议华为未公开 MetaERP 内部实现细节因此不把推测表述为事实。0. 一句话结论共享模块的自动化目标不是定时跑备份而是构建一个闭环自愈系统自动保护备份/复制/归档→ 自动感知检测/告警→ 自动决策分级/编排→ 自动恢复切换/PITR/闪回→ 自动验证一致性校验→ 自动演练持续证明可恢复核心原则故障切换靠副本与容灾秒级逻辑错误靠 PITR 与闪回分钟级合规留存靠独立归档年级。三者自动化程度不同不能用一个备份脚本混为一谈。1. 事实底座GaussDB 已经提供的自动化原子能力共享模块落在 GaussDB 上自动化首先是把这些官方能力编排起来而不是自己再造轮子。1.1 自动备份策略无需人工触发【事实】创建 GaussDB 实例时系统默认开启实例级自动备份策略并立即触发一次全量备份之后按策略周期执行全量与差量备份。关键参数参数官方默认值/范围含义全量备份保留天数默认 7 天范围 1~732 天稀疏策略可达 3660 天超期自动清理差量备份周期默认每 30 分钟一次可下调至 15 分钟备份时间窗口默认在 24h 内随机挑 1 小时建议改为业务低峰期表级备份支持实例级 / 表级 / 租户级全量、差量、日志备份可对共享关键表单独策略【事实】自动备份策略开启后不可关闭只能调整周期与窗口且为满足 PITR超出保留天数最近一次全量备份不会被立即删除。这是自动化的安全兜底。1.2 PITR 时间点恢复秒级粒度【事实】日志备份用于 PITR恢复时必须与全量备份结合分布式 PITR 恢复时间粒度达到秒级。恢复公式目标状态 基准备份 (起始 ~ 目标时刻) 的 WAL 日志重放前提三件套有效基准备份 WAL 归档开启 目标时刻在归档覆盖区间内。1.3 闪回逻辑错误的快通道【事实】GaussDB 提供闪回查询、闪回表、闪回 DROP/TRUNCATE、闪回库支持TIMESTAMP 与 CSN提交序列号双重定位精确到操作点需用 CSN时间戳有约 3 秒误差。依赖 Ustore 的 Undo 多版本与回收站机制。这意味着误批过账这类人祸理论上可以秒级回退到某个 CSN而不必走完整的 PITR——自动化编排的关键分叉点。1.4 两地三中心容灾【事实】MetaERP 采用同城跨 AZ 异地跨 Region 的两地三中心容灾跨 AZ 切换 1 分钟城市级故障分钟级恢复三副本强一致SLA 99.99%。公开口径同城双集群RPO0RTO≤120s需满足 xlog 日志盘 normal 等条件同城与异地容灾集群RPO≤10RTO≤120s【事实】同城主备故障自动切换自动倒换但跨 Region 异地灾备的升主failover官方明确为手动/通过 om_agent REST API 触发不支持自动升主。⚠️ 这是一个重要边界同城切换可自动化异地升主必须人工确认 API 编排。原因是对账与防脑裂风险太高财务系统不应自动把自己切到异地。自动化要做的是一键 前置校验而非无人值守强切。2. 总体架构【设计】共享模块自动化分层┌─────────────────────────────────────────────────────────────┐ │ Orchestration Layer (自动化编排层) │ │ Recovery Orchestrator ─ 分级决策 ─ Runbook ─ 审批门禁 │ ├─────────────────────────────────────────────────────────────┤ │ Protection Layer (自动保护) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │ │ 自动备份 │ │ WAL归档 │ │ 快照克隆 │ │ 影像/档案 │ │ │ │ 全量/差量 │ │ OBS/异地 │ │ 存储快照 │ │ 对象存储归档 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │ │ Replica Layer (自动高可用) │ │ 同城 3AZ 强同步 (RPO0) ── 异地流式容灾 (RPO≤10s) │ ├─────────────────────────────────────────────────────────────┤ │ Verification Layer (自动验证) │ │ 备份校验 / 恢复演练 / 一致性对账 / RPO-RTO 实时上报 │ └─────────────────────────────────────────────────────────────┘设计要点每一层都能自证有效——备份有校验、副本有心跳、恢复有演练。自动化的最大陷阱是备份成功但恢复失败。3. 自动化策略矩阵【设计】按数据类型分级共享模块不是所有数据一个周期应按变更频率 × 重要性 × 合规要求分级自动套用不同策略数据分级典型对象自动备份策略保留RPO 目标恢复手段优先级S交易核心​凭证头/行、应付发票、支付指令、任务工单差量 15~30min WAL 实时归档 表级独立备份短 30d 稀疏长 3660d≤10s同城 0同城切换 闪回 PITRA业务单据​报销单、合同、审批流、规则命中结果差量 30min 每日全量短 30d≤30minPITRB主数据/规则​COA、税率、凭证模板、审批路由版本化逻辑备份每次变更自动 dump永久随版本允许小时级gs_dump 还原C影像/档案​发票 PDF、OCR 原图、签收单对象存储多副本 异步异地 冷归档10~30 年合规≤24h独立归档恢复D审计轨迹​操作日志、稽核、规则日志追加写 WORM 跨区复制≥审计周期不允许丢只读重建3.1 自动化的三个自动触发点时间触发定时全量/差量cron / 备份策略如周全量 30min 差量事件触发【设计】月结开始、批量过账、规则包发布时自动额外备份 记录 CSN/时间戳作为可回退锚点变更触发【设计】COA、税率、凭证模板变更 → 自动逻辑备份并写入版本库事件触发是共享模块自动化的精髓批量跑批前自动打点事后恢复可以精确落到这次跑批前那个 CSN而不是靠人回忆时间。4. 自动备份实现【设计】基于 TPOPS API 对象存储【事实】GaussDB 管理平台TPOPS提供备份恢复管理面异地容灾可通过 om_agent HTTPS REST API 操控搭建、failover、switchover、状态查询。自动化编排应优先调用管控 API而非登录节点执行命令。4.1 配置实例级自动备份策略示意{ instance_id: metaerp-shared-gaussdb, full_backup: { enabled: true, window: 02:00-03:00, period: [Mon, Tue, Wed, Thu, Fri, Sat, Sun], retention_days: 30 }, differential_backup: { interval_minutes: 30 }, wal_archive: { enabled: true, target: obs://metaerp-backup/wal/{region}/{instance}, cross_region_replication: true }, sparse_retention: { weekly: Sun, retention_days: 3660 } }4.2 自动保护流水线伪代码骨架class SharedBackupAutomation: def protect(self): # 1. 时间触发周期差量/全量由备份策略自动执行此处做校验 self._verify_backup_policy(instance_level) self._verify_backup_policy(table_level) # 关键表表级备份 # 2. 事件触发高风险操作前自动打点 csn self._query_csn() # SELECT gs_get_next_xid_csn() timestamp self._query_now() self._register_restore_anchor( batch_idcurrent_batch_id, csncsn, tstimestamp, tables[ap_invoice, journal_line, expense_claim, task_queue] ) # 3. 主数据变更版本化逻辑备份 if self._detect_metadata_change(): self._gs_dump(schemafssc_rules, taggit_commit_hash) # 4. 备份落盘后自动校验防止假成功 backup_id self._latest_backup_id() self._assert_checksum(backup_id) self._assert_restorable(backup_id) # 轻量恢复测试 # 5. 归档到对象存储 跨区复制 self._push_to_obs(backup_id) self._replicate_cross_region(backup_id)关键第 4 步的assert_restorable​ —— 每次备份后自动恢复到临时实例做最小化校验起实例、连库、查行数/最新 CSN这是自动化的核心也是最容易省略的一步。5. 自动恢复实现【设计】分级决策 编排5.1 分级决策矩阵谁该自动谁该人工故障类型自动化级别手段决策单 DN 节点故障全自动​CM 自动主备切换同城 RPO0, RTO60s无需人工AZ/机房故障全自动​自动倒换到另一 AZ无需人工同城双中心灾难半自动一键校验异地灾备升主需 API/人工触发人工确认 自动编排逻辑误操作单表自动推荐 人工审批​闪回表 / 闪回查询CSN 精确自动生成 Runbook审批后执行批量过账错误自动推荐 人工审批​PITR 表级 / 闪回事务用锚点 CSN 自动定位勒索/介质损坏人工主导​全量 WAL 重放到指定点灾备委员会决策原则切换能自动回退/升主必须有人拍板。财务数据的反向操作成本极高自动化负责准备到位 一键执行不负责替人做决定。5.2 Recovery Orchestrator 骨架class RecoveryOrchestrator: def decide(self, incident): if incident.type node_down: return self._auto_failover() # 同城自动切换已内置 if incident.type logic_error: anchor self._find_anchor_before(incident.batch_id) plan self._build_pitr_plan( tablesincident.affected_tables, target_csnanchor.csn, # 优先 CSN秒级精确 target_tsanchor.ts ) return self._submit_for_approval(plan) # 人工审批门禁 if incident.type region_down: checks self._pre_failover_checks() # RPO/RTO/脑裂/对账 if checks.pass: return self._api_failover( # om_agent REST API disaster_clusterpromote_cluster ) # 仍走人工确认节点 raise Unrecoverable(checks.report) def _build_pitr_plan(self, tables, target_csn, target_ts): return { restore_to_new_instance: True, # 官方推荐恢复到新实例 base_backup: self._pick_nearest_full(target_ts), wal_replay_to: {csn: target_csn, ts: target_ts}, tables: tables, post_steps: [ reconcile_journal_balance, # 自动对账 reconcile_ap_balance, replay_payment_idempotency, # 支付幂等核对 audit_trail_rebuild # 审计轨迹重建 ] }5.3 闪回的自动化用法单表逻辑错误-- 1) 自动化批量操作前记录锚点 SELECT int8in(xidout(next_csn)) FROM gs_get_next_xid_csn(); SELECT now(); -- 2) 误操作发生后先闪回查询确认只读安全 SELECT * FROM ap_invoice TIMECAPSULE CSN 79351682; -- 精确到提交序列号[40](ref) -- 3) 确认无误后闪回表秒级不受库大小影响[43](ref) TIMECAPSULE TABLE ap_invoice TO CSN 79351682;【事实】闪回基于 Ustore 的 Undo 多版本与回收站受undo_retention_time与recyclebin控制Astore 仅支持 DROP/TRUNCATE密态表等部分对象不支持闪回。自动化必须先把这些前置条件纳入健康巡检否则恢复时才会发现没开 undo 保留。6. 自动验证与演练【设计】可恢复必须被自动证明【事实】官方建议定期在测试环境做 PITR 演练验证备份与归档有效性华为灾备方案提供拓扑可视化、一键切换与演练、敏捷恢复。6.1 持续验证闭环每日备份成功 校验和 备份可列举 每周自动恢复到临时实例 → 起库 → 跑一致性 SQL 套件 每月完整 Runbook 演练含支付幂等、影像关联、审计轨迹 季度异地升主演练人工 API 编排[39](ref)一致性 SQL 套件示例自动跑、自动比对-- 共享模块恢复后必须平衡的账 SELECT 借贷平衡 , COUNT(*) FILTER (WHERE dr ≠ cr) FROM trial_balance; SELECT 应付暂估 , SUM(balance) FROM ap_invoice WHERE status暂估; SELECT 支付幂等 , COUNT(*) FROM payment WHERE instruction_id IS NULL; SELECT 凭证连续性 , MAX(journal_no)-MIN(journal_no)1 - COUNT(*) FROM journal;6.2 RPO/RTO 实时监控【事实】容灾集群实时上报hadr_cluster_stat状态、RTO、RPO各分片最大值、搭建/切换进度。自动化层应把这些指标接入监控并在 RPO 逼近阈值时自动告警 触发增量补偿。# 自动告警规则 - metric: hadr_rpo_seconds threshold: 10 # 异地 RPO 官方口径 RPO≤10[11](ref) action: [alert, trigger_incremental_compaction] - metric: backup_age_minutes threshold: 35 # 差量默认 30min[13](ref) action: [alert, run_backup_now] - metric: restore_test_age_hours threshold: 168 # 超过 7 天未演练 action: [schedule_drill]7. 关键自动化脚本清单落地交付物#脚本/服务触发作用1backup-policy-sync定时统一下发实例级表级自动备份策略2pre-batch-anchor事件跑批/规则发布记录 CSN/时间戳锚点3metadata-version-dump变更事件gs_dump Git 版本化4backup-verifier备份完成后校验和 轻量恢复测试5wal-archive-watchdog实时监控归档连续性断档即告警PITR 前提6pitr-planner故障申报自动选基准备份 计算重放点 生成 Runbook7flashback-advisor单表误操作推荐 CSN/时间戳 预览差异8consistency-suite恢复后自动借贷平衡、应付余额、凭证连续性9drill-orchestrator周/月/季自动搭建演练环境 执行 Runbook 出报告10rpo-rto-reporter实时采集上报指标超阈值联动8. 自动化边界与风险必须知道的坑异地升主不能全自动官方为手动/API 触发财务系统需人工确认 对账前置。闪回有前置条件需 Ustore、undo_retention_time0、回收站开启密态表/系统表/临时表不支持——自动化要纳入健康巡检。归档中断 PITR 断档WAL 归档一旦中断中断区间不可恢复必须实时看门狗。恢复目标必须在保留期内且不能跨越扩容/升级产生的断档时间点。加密备份的密钥管理自动恢复新实例需同密钥密钥与备份必须异地分管。逻辑错误与介质错误的手段不可混用同城切换救不了误过账PITR 救不了机房没了。演练本身要脱敏用生产备份做恢复演练必须遵守字段脱敏与权限隔离。9. 一页速览共享模块自动化闭环事件/定时 ──▶ 自动备份(全量30min差量WAL归档) ──▶ 自动校验(checksum可恢复性) │ 批量操作前 ◀── 自动打 CSN/时间戳锚点 ◀──────────────┘ │ 故障发生 ──▶ 分级决策 ▼ ├─ 节点/AZ 故障 ──▶ CM 自动切换 (RPO0, RTO60s) ├─ 逻辑错误 ──▶ 闪回(CSN秒级) / PITR ──▶ 自动对账 ──▶ 审批门禁 └─ 区域灾难 ──▶ API 一键升主 人工确认 ──▶ 反向增量同步 │ 持续验证 ◀──────────────┘ 周演练 / 月 Runbook / 季异地切换引用说明GaussDB 自动备份策略、差量周期、保留规则、表级备份PITR、WAL 归档前提、恢复粒度闪回、CSN/TIMESTAMP 双定位、Ustore/回收站机制MetaERP 高可用、两地三中心、RPO/RTO异地容灾手动/API 触发、不支持自动升主自动故障切换、CM 心跳仲裁灾备演练、拓扑可视化、一键切换DRS/UGO 迁移、MetaERP 数据搬迁验证