Files

3.4 KiB
Raw Permalink Blame History

name, description, status, version, date
name description status version date
db-backup-enroll 新建带数据库的 agent 时,自动把其库加入每日备份脚本 backup-agent-dbs.sh,保证所有本地库被 crontab 03:00 备份。 proposal v1 2026-08-26T11:53:23.566Z

DB Backup Enroll — 新建 agent 自动加入数据库备份

目的

本地 Docker MySQL 有一套每日 03:00 自动备份机制(crontab + /usr/local/bin/backup-agent-dbs.sh)。每当新建一个带数据库的 agent,必须把它的库加进这个备份脚本,否则新库不会被备份,存在数据丢失风险。

核心脚本与机制

内容
备份脚本 /usr/local/bin/backup-agent-dbs.shroot 所有,需 sudo 编辑)
触发 crontab0 3 * * * /usr/local/bin/backup-agent-dbs.sh
备份方式 docker exec mysql mysqldump --single-transaction --routines --triggers --events <db>
备份产物 workspace-<agent>/db/<db>_<日期>.sql.gz + <db>_latest.sql
保留 30 天前 .sql.gz 自动删除
同步 git commit + push 到 Gitea 远程
日志 workspace/db/backup.log

需要备份的 MySQL 库(本地 Docker 实例 127.0.0.1:3306

当前 DB_MAP(脚本内)已覆盖:main / resume / travel / fitness / finances / wellness / juaner / tab。

⚠️ 任何新建带库 agent,其库必须加入此映射。

标准操作流程

1. 新增 agent 后——把库加入备份(核心步骤)

用 sudo 精确编辑 /usr/local/bin/backup-agent-dbs.sh三处都要改(缺一不可):

(a) 扩展 DB_MAP(脚本中部):

declare -A DB_MAP=(
  ...
  ["<库名>"]="workspace-<agentId>"     # 新增这一行
)

(b) 扩展清理循环名单for WS in workspace ... 一行):

for WS in workspace workspace-resume workspace-travel workspace-fitness workspace-finances workspace-wellness workspace-juaner workspace-tab workspace-sql; do
# 把 workspace-<agentId> 追加进去

(c) 扩展 git add 名单for WS in resume travel fitness finances ... 一行):

for WS in resume travel fitness finances wellness juaner tab sql; do
# 把 <agentId> 追加进去

2. 语法与功能验证

sudo bash -n /usr/local/bin/backup-agent-dbs.sh   # 语法检查
# 手动测试该库能否备份(不触发整个脚本的 git push)
docker exec mysql mysqldump -uroot -p5gynj20J --single-transaction --routines --triggers --events <db> | gzip > /tmp/test_<db>.sql.gz

3. 核对清单(新 agent 交付前)

  • DB_MAP 含 <库名> => workspace-<agentId>
  • 清理循环名单含 workspace-<agentId>
  • git add 名单含 <agentId>
  • 手动 mysqldump 该库成功
  • (可选)真实触发一次备份确认落盘

红旗 / 注意

  • 脚本属 root:编辑必须 sudo,改前先 sudo cp ... .bak-$(date +%Y%m%d) 备份。
  • 密码 5gynj20J 明文在脚本中,不要外泄到聊天/日志
  • docker exec mysql ... 用的是容器名 mysqlPostgreSQL 部分是 postgres 容器 openclaw 库,无需动(除非新增 PG 库)。
  • 备份会自动 git push 到 Gitea——这是脚本设计的一部分,属授权操作,无需额外请示。

相关文件

  • 主脚本:/usr/local/bin/backup-agent-dbs.sh
  • 备份日志:/home/yangxuan/.openclaw/workspace/db/backup.log
  • 数据库映射定义:MEMORY.md →「🐬 本地数据库环境(Docker MySQL)」→「本地库 ↔ Agent 映射」