1. OpenClaw 数据库灾备到底要解决什么问题OpenClaw 数据库灾备的核心目标是让数据库在硬件故障、误删、机房断电甚至区域级事故中依然能保证数据不丢、服务不断。它适合正在用 OpenClaw 做业务系统、又不想在故障时手忙脚乱的运维和开发同学。简单说灾备就是给数据库买三份保险定时备份防误操作异地灾备防机房级事故故障自动切换防服务中断。我见过太多团队把备份脚本往 crontab 一扔就以为万事大吉结果真出事时发现备份文件是空的、异地库根本没同步、切换脚本权限不对。这篇就按 OpenClaw 的实际落地路径把定时备份、异地灾备、故障自动切换三块拆成可复制的 config.toml 和 settings.json 骨架再配合 TaoToken 统一 Key/API 通道做配置校验和故障演练让你在本地和异地环境都能跑通完整流程。整篇的节奏是先讲清楚每块配置放在哪、参数什么意思再给完整片段最后逐条验证。你不需要一次全上可以先跑通定时备份再加异地最后接自动切换。2. TaoToken 前置统一 Key 与 API 通道在开始写配置之前先把 TaoToken 的接入通道准备好。灾备方案里会涉及配置校验脚本、故障演练脚本这些脚本需要调用 AI 工具做语法检查和逻辑推演如果每个脚本都单独配 Key管理起来会很乱。TaoToken 的作用就是把这些调用统一到一个 Key 和一条 API 通道上。你需要先拿到 API Key入口在控制台的 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。拿到 Key 之后API 基地址用 https://taotoken.net/api 注意这个地址不带 UTM 参数直接写进配置即可。如果你后面要做长期编码或 Agent 类的自动化演练可以了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。只是想验证模型对话是否通用模型对话入口https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 配置格式以文档为准。注意API Key 不要硬编码进脚本提交到仓库用环境变量或独立的 secrets 文件后面配置骨架里会体现这一点。3. 可复制配置config.toml 与 settings.json 骨架3.1 定时备份 config.tomlOpenClaw 的备份配置放在 config.toml 的[backup]段。全量备份每周日 0 点增量每小时一次保留周期按存储空间公式估算。下面是我实测可用的骨架[backup] enabled true mode physical full_schedule 0 0 * * 0 # 每周日 0 点全量 incremental_schedule 0 * * * * # 每小时增量 retention_days 14 compress zstd encrypt aes-256-gcm checksum crc32 [backup.storage] type local path /data/openclaw/backup # 异地副本由 sync 段负责推送 [backup.sync] enabled true target remote remote_host dr-node-01 remote_path /data/openclaw/dr bandwidth_limit 200MB/sretention_days别拍脑袋填按数据规模 × (1 保留周期) × 压缩率^-1估算压缩率 zstd 一般按 0.3 算。带宽限制是为了避免备份流量把生产链路打满异地同步尤其要注意。3.2 异地灾备 settings.json异地灾备的关键是同步模式和切换策略。settings.json 里replication段控制同步failover段控制切换{ replication: { mode: async, primary: bj-prod-01, standby: sh-dr-01, sync_interval_ms: 200, window_alpha: 0.85, conflict_policy: primary_wins }, failover: { enabled: true, health_check: { network_interval_s: 3, service_interval_s: 5, data_interval_s: 600, packet_loss_threshold: 0.001, sql_timeout_ms: 50 }, quorum: { heartbeat_timeout_s: 15, min_votes: 2 }, switch_actions: [vip_drift, dns_refresh, pool_reset] } }window_alpha是异步流控的安全系数网络抖动大就调低。min_votes是仲裁票数三节点集群填 2防止脑裂。switch_actions的顺序不能乱VIP 漂移必须在 DNS 刷新之前否则客户端会连到旧地址。3.3 TaoToken 校验脚本配置配置写完不能直接上先用脚本做语法和逻辑校验。校验脚本通过 TaoToken 调用模型配置片段如下export TAOTOKEN_API_KEY你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api curl -s $TAOTOKEN_BASE_URL/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet, messages: [ {role: user, content: 检查以下 config.toml 的 backup 段是否有语法错误和参数冲突\n粘贴配置} ] }把返回结果和本地toml解析器的报错对照能提前发现字段拼写、类型不匹配这类低级问题。4. 验证请求与成功结果4.1 备份验证配置生效后先手动触发一次全量备份确认文件生成且校验通过openclaw backup run --mode full --config /etc/openclaw/config.toml openclaw backup verify --latest --checksum crc32成功输出类似[OK] backup created: /data/openclaw/backup/full_20260601.tar.zst [OK] checksum matched: crc328f3a2b1c [OK] retention applied: removed 2 expired files如果 checksum 不匹配说明写入过程有损坏先别继续检查磁盘和压缩参数。4.2 异地同步验证在灾备节点上确认数据到达并对比主备的块一致性openclaw replication status --config /etc/openclaw/settings.json openclaw replication diff --primary bj-prod-01 --standby sh-dr-01正常状态会显示lag_ms在几百毫秒内diff_blocks为 0。如果 lag 持续增长检查bandwidth_limit是否太小或者网络 RTT 是否异常。4.3 故障切换演练用混沌工程的方式注入故障验证自动切换。先模拟主库进程被杀# 在测试环境执行生产慎用 kill -9 $(pgrep -f openclaw-primary) openclaw failover status --watch预期在 30 秒内看到 VIP 漂移、DNS 刷新、连接池重置三步完成客户端无感知。切换完成后用 SQL 探针确认新主库可写openclaw sql probe --target sh-dr-01 --query SELECT 1返回response_ms 50即视为切换成功。5. 本篇常见错排查备份文件为空或极小多半是path指向了不存在的目录或者权限不足。检查openclaw backup run的 stderr确认运行用户对/data/openclaw/backup有写权限。异地同步 lag 持续增大先看bandwidth_limit200MB/s 在跨地域链路上可能偏高调低到 50MB/s 试试。再看sync_interval_ms200ms 在高延迟链路上会导致重传适当放宽到 500ms。自动切换不触发检查health_check的三个 interval 是否都生效尤其是data_interval_s默认 600 秒演练时等不及可以临时调小。另外确认min_votes不超过实际节点数三节点填 2两节点填 2 会导致永远凑不齐票。切换后客户端仍连旧库DNS 刷新有 TTL 缓存dns_refresh之后客户端可能还在用旧解析。把应用侧连接池的max_lifetime调短或者切换后主动重启连接池。TaoToken 校验请求 401Key 没读到环境变量或者TAOTOKEN_BASE_URL写成了带 UTM 的地址。基地址只保留https://taotoken.net/api不要加查询参数。6. 继续把灾备跑通配置骨架给到这里剩下的就是按你的实际环境填参数、跑演练。定时备份先跑一周确认 retention 和 checksum 稳定异地同步观察 lag 曲线把window_alpha调到不触发流控的值自动切换在测试环境多演练几次把heartbeat_timeout_s和min_votes调到符合你集群规模。需要统一管理 Key 和 API 通道去 API Keys 页面创建https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。配置格式和字段说明以接入文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。长期做编码和 Agent 自动化演练可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。验证模型对话是否通用模型对话入口https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。