运行与备份

平台与数据库的日常运行、状态密钥保管、备份与恢复演练的操作步骤。

快速上手 8155 字 ·约 20 分钟读完 ·更新于 2026-10-28

备份边界

数据库含机构、用户密码哈希、会话、合约签名、使用账本、加密结果及审计证据;按企业敏感业务数据管理。数据库/API源、原始文件、固定快照、配置引用与连接器密钥由提供方另行保管。仓库忽略 .runtime、.key、.env、构建物与依赖目录,不能将这些内容加入版本库。

使用与目标 PostgreSQL 主版本匹配的 pg_dump。通过受限权限的 PGPASSFILE 或秘密管理器提供凭证,不把密码写进命令行。

pg_dump --format=custom --file=/secure/backups/datanous.dump --dbname=datanous
pg_restore --clean --if-exists --exit-on-error --single-transaction --dbname=datanous_restore /secure/backups/datanous.dump

上述恢复命令会清理目标对象,只能在刚创建的空专用恢复库操作,不能指向现有业务库;恢复前停止业务写入,检查备份时间、完整性及加密密钥对应关系。另行离线备份平台私钥、连接器私钥、固定的平台公钥、部署配置和挂载数据。平台私钥同时关系到签名与结果解密,不能只备份数据库。恢复演练与容器回滚尚未在本次环境验证。

常见故障

现象核验与处理
任务长期排队检查连接器进程、平台地址、公钥与编号、时间同步、白名单配置和最近联系时间;不要代替用户签署或跳过合约
租约超时 / 网络结果不明平台拒绝过期回执并释放未完成预占次数。确认本次状态后,由使用方提交新幂等请求;不自动重跑未知任务
输入/策略拒绝提供方本地检查 CSV 格式、字段、有限数值、最小分组和结果行数;平台仅保留固定失败原因
无法签署使用原登记设备,查验 IndexedDB、Ed25519 支持与合约版本。不得在数据库中随意替换公钥或伪造签名
结果不可见检查提供方审核、合约有效期与终止状态;导出还要求 allowExport
密钥丢失暂停相关服务,恢复已确认备份。当前没有自助恢复/轮换流程,不能直接换钥并宣称历史有效
签名请求被拒绝检查连接器公钥、撤销状态、30 秒时间窗、随机数是否复用、RequestURI/请求体字节是否变化

部署约束

生产环境应采用企业认可的秘密管理、可信时间、TLS 证书、数据库最小权限、日志外送与告警、备份恢复演练及漏洞升级流程。当前应用内登录限流为每进程,部署多副本需要网关统一限流。平台状态密钥应一致且受控分发,多副本 PostgreSQL 状态正确性已通过跨 Store 并发测试,尚无多主机压力和故障演练证据。

当前连接器采用提供方信任域中的固定程序,没有容器沙箱、TEE 证明或宿主机防篡改保证;提供方宿主机管理员可以修改本地文件和程序。不要将本配置用于声称抵御管理员的敏感联合计算。需安全计算的场景仍应接入并验证隐私计算/可信执行组件。

v0.2 资产工作区升级与恢复

平台新增迁移2,启动时持有 PostgreSQL advisory lock 并在事务中迁移。升级前停止新任务、确认活动任务结束或取消,备份数据库和平台状态密钥,然后同步升级平台及企业连接器。旧版本不理解数据集绑定和新的签名工作内容;不要混用两个版本或直接让旧平台继续写入迁移后的库。回滚需恢复与旧二进制对应的整套备份,本次未做恢复演练。

除了平台数据库和密钥,企业侧还必须备份:

  • 连接器 sources 配置、配置引用所需环境变量/秘密管理记录,以及连接器编号和私钥。
  • 企业根目录的原始白名单文件,以及 .datanous/datasets 整个内容寻址快照目录。固定产品/合约可能继续引用历史快照,不能只备份最新文件。
  • 数据库源及 API 的独立备份或重现条件。重新抓取当前源不能保证还原已经签署的历史输入。

快照文件0600、新建缓存目录0700。平台数据库没有原始快照内容;仅恢复平台不能重建丢失的企业产物。当前没有自动缓存清理,勿按文件年龄直接删除;需先核对历史产品、合约和加工输入引用。

资产任务超时、取消、连接器撤销后旧回执拒绝。先查“运行记录”确认状态,再人工发起新扫描/快照/运行;不要把网络超时当作无副作用并直接重跑。质量失败版本保留隔离,修改源或新建规则后生成新版本;不能直接在数据库把状态改成 ready。源结构变化需重新发现并生成新快照,已发布产品不会自动追随最新版本。

v0.3 治理升级与本地恢复证据

迁移3新增产品创建人、发布审核、入空间申请、策略模板及版本表。升级先备份平台库、平台状态密钥、企业侧全部被引用快照和配置,平台与连接器使用同版发布。已有签名内容不重写;旧已发布产品不要求补签。新增数据集产品必须另一位人员审核。人员改权/停用会撤销其会话及未用签署挑战,不能用恢复旧会话代替重新登录。

本机在完整合成库执行过实际恢复:public schema恢复到随机新建临时数据库、平台密钥副本用于真实结果解密、7份缓存快照覆盖9个数据集版本、21张业务表行数比对、2份结果一致、70条签名审计事件离线校验。恢复平台和临时库已清理。脚本仅用于回环开发库:

source .runtime/database.env
DATANOUS_ALLOW_DEMO=true python3 scripts/check-local-restore.py

脚本要求项目内匹配版本PostgreSQL工具,拒绝非回环地址和含非合成企业的库。它只对随机新建的临时恢复库执行清理,绝不覆盖原库。备份含账号哈希与业务状态,保存在忽略目录 .runtime/recovery-v3 并限制属主访问;不能加入版本库。首次演练修复了public schema已存在的冲突,后续使用受上述目标库限制的 --clean --if-exists。

此结果不覆盖其他数据库源/API的重建、异地或独立集群、容器恢复、生产TLS、升级回滚和生产压力演练。原有“未验证”表述以本段的有界实测结果补充,PDT-020尚未全部完成。

v0.4 生命周期升级

当前数据库编号为5,依次执行migration4.sql和migration5.sql。迁移4增加数据源版本/状态/历史及产品最后修订人;迁移5增加人工资产别名、数据集版本自己的名称/分类和双方解除申请。旧来源自动生成v1定义,旧数据集回填当时可用的名称与分类;该回填无法重建早期未保存的历史标签变化。迁移事务有全局advisory lock保护,新版本号数据库会被旧程序拒绝。不要改写已执行的编号或清空库。

升级前备份数据库、平台密钥与企业侧.datanous/datasets缓存。平台和连接器一起更新后重启;新入队工作包含资源版本,旧任务JSON中这些字段为空时仍不进入签名内容,保留旧工作摘要兼容。连接配置地址由企业本地维护,修改sources配置后重启连接器,本轮没有热加载。

本轮check-local-restore.py输出.runtime/product-v4-restore.json,归档在.runtime/recovery-v4;合成库25张表、12个数据集版本、7个文件、2个结果和92条签名事件恢复核验通过,临时库已移除。保留v0.3历史报告;本轮仍未验证Docker、生产TLS、其他集群和版本回滚。schema升级后不要直接运行旧二进制,需要使用升级前的完整备份恢复并按实际环境演练。

生命周期试点分两段执行:使用具备cryptography的开发Python运行DATANOUS_ALLOW_DEMO=true python scripts/demo-lifecycle-v4.py prepare,重启本地开发连接器读取新增合成CSV配置,再运行finish。contracts仅用于本轮合约阶段中断恢复。脚本固定回环地址,要求合成企业,私有账号/测试密钥只进入忽略目录,不打印或提交。产品部署不依赖Python或该测试库。

v0.5 可选链模块与恢复

迁移6新增chain_nodes、chain_operations和chain_anchor_intents,原业务库、签名和结果不重写。升级前备份数据库、平台状态密钥及企业缓存。旧程序不能运行在迁移6数据库上;回滚需要恢复升级前完整备份并实机演练。本轮没有完成生产/容器回滚。

启用链模块还需独立备份DATANOUS_CHAIN_CONFIG所指配置文件、企业secp256k1签名私钥和可信链参数;权限0600。交易原文在库中加密,恢复平台状态密钥后才可解密重播。恢复检查期间移除该环境变量,禁用链工作器,先只读核对队列与链的现存状态;不能因恢复了旧数据库就自动重发所有交易或分配新nonce。链账户不与外部钱包/另一套数据库共享序号管理。节点/费用、重试及确认的边界见《区块链存证部署与验收》。

check-local-restore.py当前输出.runtime/product-v5-restore.json,私有归档位于.runtime/recovery-v5。实际恢复public schema并比对28张关键表,保留平台密钥和7份内容寻址快照,12个数据集版本、2份加密结果及141条企业签名事件通过核验;恢复后6份当前链证明经固定信任参数CLI在线核验,临时恢复库已清理。链配置与私钥副本分别备份,恢复平台没有启用链工作器。

这些证据不包含区块链节点状态恢复。此前中断关闭了内存Hardhat节点,平台检测到旧创世块不符,旧记录保留为待复核;停用旧连接后,对新链实例重新固定身份、部署和锚定,未覆盖旧记录。Hardhat应仅用于开发;生产链持久化、独立参与方治理、国密证书、异地恢复和正式测评仍未验收。

0.5.2-dev 候选版本的一致备份与回滚边界(2026-10-28)

本节补充并覆盖上文旧版“只含迁移6/没有恢复流程”的当前操作说明;旧版实测数字仅是历史检查点,不自动证明当前候选版恢复成功。当前迁移上界以候选源码 internal/platform/store.go 的 CurrentSchemaVersion、所有编号迁移及实际 schema_migrations 最大值三者一致为准;本轮SCIM变更目标为迁移60,打包前必须确认一致。不要让旧程序写入已迁移的新库。启动拒绝高版本库时应停止,不能删除迁移记录绕过保护。

完整恢复集需绑定同一停止写入时间点、软件版本、平台/连接器/CDC构建摘要及配置摘要:

  1. 平台:完整业务schema(不是固定28表列表)、平台状态私钥、固定信任公钥清单、连接器/外部链映射与运行配置。包括新增授权/凭据修订、人工复核、调度/增量水位、投递预约/回执/死信等表。旧脚本 check-local-restore.py 固定连接8090及旧public/28表/旧演示路径,不是当前隔离恢复工具;本轮不要直接运行它。
  2. 企业连接器:完整企业根目录配置与白名单数据、.datanous/datasets固定历史快照、.datanous/uploads固定上传对象、.datanous/upload-sessions会话元数据/暂存分块/归档子目录、.datanous/upload-audit.jsonl当前审计段和.datanous/upload-audit-archive全部前驱段。保留原文件名/内容/权限;不得仅备份最新段、只备份已完成会话或按文件年龄清理。记录当前可信链头到独立保管的清单,只有同域副本不能证明独立锚定。
  3. 密钥和凭据:平台、连接器、链签名私钥及其历史可信公钥分别由企业秘密管理保管;源数据库/API与机器采集/通知接收凭据、OIDC及SCIM私有配置独立备份并限制访问;SCIM机器Token原文仅在秘密管理中保管,配置内只存摘要及到期时间。OIDC配置含clientSecret和显式subject映射,文件0600、父目录0700;原始OIDC token不应写入日志或备份材料。凭据备份和SBOM/公开报告不能混放。
  4. CDC:独立目标库的流绑定/关系/检查点/已应用事件与源复制槽、publication、system identifier、generation和源LSN必须配套记录。停止CDC消费并停止源确认后备份目标;不得恢复较旧目标却保留已前移且已回收WAL的源确认位置。若无法证明可连续重放,应使用新generation/新槽重新快照建基线,不能伪造LSN推进。具体参数和模式以 datanous-cdc -help 与CDC专属说明为准,默认不启用。

形成备份与隔离恢复检查点

先阻止新写入/新任务,确认在途任务结束或明确标记未知结果,停止平台、连接器上传/维护/执行循环、审计投递和CDC写入;不要仅停止网页。再备份数据库和企业文件、配置、密钥,并生成受保护的文件SHA-256清单及schema/版本清单。对于活动上传,需保留会话元数据和其对应暂存文件的同一静止点;恢复后按原到期时间与最新资格检查决定续传,不能延长旧短期授权。文件权限与文件锁需在目标文件系统确认,NFS或其他共享文件系统不从本机flock测试推导通过。

恢复目标必须是新建隔离数据库/目录/端口,不得覆盖运行中的8090。先校验备份摘要和密钥配套,恢复全schema与完整企业目录,再用对应候选二进制启动;保持外发/链广播/自动执行默认关闭。核对所有表、固定对象摘要、被产品/合约引用的历史版本及结果解密。上传审计需要用独立固定的可信连接器公钥及备份前记录链头执行完整历史核验:

verify-upload -enterprise-root /isolated/restored-enterprise \
  -trusted-keys /secure/pinned-connector-public-keys.json \
  -history -expected-head <backup-time-verified-chain-head>

缺少前驱段、密钥不匹配、对象摘要变化、schema版本不一致或水位不可连续恢复都必须停止;不通过截断日志、重写签名、重置水位或补造回执修复。审计轮换是显式维护操作,备份恢复核验不使用 -rotate。恢复的会话/短期凭据不能作为重新授权依据;投递、自动调度和外部身份配置应先核对当前主体、版本/启动代次、远端已接收结果与撤销状态,再按各流程显式重新激活,未知投递仍沿用原稳定幂等键。

升级与回滚

升级前冻结完整恢复集并在隔离目标演练;记录迁移前后schema、计数、签名/解密/固定版本/水位核验和故障结果。正式切换需要平台、企业连接器与相关CLI版本匹配。回滚使用旧二进制加与它配套的完整旧恢复集,不对当前新库执行逆向删列,不仅替换二进制。切换后产生的新业务/外部已确认动作不能被静默抹去,需先冻结并做一致性对账;未完成对账不得重新投递或重新消费。

此前通过 TestIsolatedReleaseBackupRestore 完成schema59的有界本地演练:随机测试schema经真实pg_dump/pg_restore恢复到可删除的新数据库,97张表逐表内容摘要一致,7份企业文件一致,1份加密结果可解密,11条平台签名事件可核验,固定数据集/人工复核版本保留,归档上传可读、部分上传可幂等续传、已完成任务重放不重复落库。错误密钥、错误信任根、损坏快照和未来schema均被拒绝,恢复目标数据库已删除。首跑仅重复清理已删数据库报错,修复清理逻辑后最终复跑通过,原失败日志保留。

本轮已进一步完成schema60演练:98张表、12个企业文件、11条平台签名事件及1份加密结果一致。企业上传审计备份前经过两次显式轮换,3段/6事件完整恢复;续传及归档后扩展为同3段/14事件。两个前驱各自缺失或篡改、当前段篡改、错误可信公钥、错误/旧链头均拒绝。可信公钥和备份前链头独立保管,不从恢复材料自报推导信任。详见最新恢复记录。

复现使用可交付的私有集群执行入口,不依赖本机database.env、现有数据库或其他.runtime脚本:

python3 scripts/test-release-restore-private.py \
  --pg-bin /absolute/path/to/postgresql/bin \
  --output .runtime/release-restore-new-run

--pg-bin须包含同主版本的initdb/postgres/pg_ctl/createdb/pg_dump/pg_restore,输出目录须尚不存在。本机已有完整工具时可用--pg-bin "$PWD/.runtime/postgres/bin"。runner清除继承的数据库/PG配置,生成随机SCRAM测试凭据,在全新回环端口启动独立集群,再在该集群内创建专用测试库和可删除恢复库。Go临时文件、转储、密钥和集群数据均放入本次私有临时目录。

测试结束核对runner-summary.json中的退出结果、stopped和private_data_removed。正常路径和强制Go测试失败路径均已验证关闭/清理;关闭无法确认时保留数据供恢复,不强删运行中的集群。日志只在输出目录保留,不输出连接秘密。

最新证据见隔离恢复记录及.runtime/parallel-files-restore-private-cluster/,此前schema59的97表/7文件记录继续保留为历史证据。当前schema60共98表,其中部分为合成空表,不能据此声称每个新增业务路径均已非空恢复验收。本轮已经构造多段上传审计历史并验证完整链恢复/续写及失败拒绝;仍不包含容器、生产TLS、异地灾备、真实源CDC连续性、外部投递或旧版本升级回滚实测。

产品组合与独立投递队列的备份补充

候选平台与连接器的产品组合声明、所用目录版本与摘要、worker可执行文件摘要及cgroup配置应随交付清单保留。声明中的服务能力是待核实配置,恢复后仍须核对实际服务,不以旧清单代替当前运行条件。私有OIDC/SCIM、恢复信任与数据库凭据继续按原密钥保管要求处理,不写入公开产品目录。

internal/anchoroutbox使用独立datanous_anchor_* schema,不包含在仅备份主平台schema的快照内。接入该组件时单独备份anchor_config、anchor_jobs、anchor_recovery、固定公共信任资料及适配版本。恢复旧快照前停止原实例和恢复副本的全部发送者;快照中queued只说明当时未保留发送,不能证明之后远端未收到。

在恢复副本显式调用FenceRestoredSnapshot(ctx, snapshotSHA256, reason, true),以实际备份摘要和处置理由建立持久恢复围栏;该确认只是操作者声明,代码不证明跨环境停发。方法将旧queued/dispatching转为unknown并保留原请求和终态,不发送、不重试。相同摘要/理由重入返回原结果,不改变后来新入队的任务。围栏后根据真实对端证明Reconcile;缺乏可信回执的项目继续未知,不据“查询不到”自动重发。详细接线与本地旧副本验证见独立锚定持久投递说明。

本轮独立outbox验证的是崩溃保留、重开、并发和认证回执核对,不是异地恢复或第三方信任域验收。操作边界见独立锚定持久投递说明。

这一步卡住了?请通过首页客服微信沟通。 ← 返回文档中心