Files
openclaw-config/agents/main/agent/workshop-skills/db-backup-enroll/SKILL.md
T

3.1 KiB
Raw Blame History

name, description
name description
db-backup-enroll 新建带库 agent 后核对每日 03:00 备份是否覆盖其库(backup-agent-dbs.sh 动态发现,无需改脚本)。

DB Backup Enroll — 新 agent 的库是否已被每日备份覆盖

目的

本地 Docker MySQL 有每日 03:00 自动备份(crontab + /usr/local/bin/backup-agent-dbs.sh)。新建带库 agent 后,核对其库已被自动覆盖;缺了就修根因,不要手工往脚本里塞库名。

机制(2026-09-16 改造后,实测)

内容
触发 crontab0 3 * * * /usr/local/bin/backup-agent-dbs.sh
目标发现 动态agents.entries 的 id ∩ MySQL 实际存在的库(排除 mysql/information_schema/performance_schema/sys
备份方式 docker exec mysql mysqldump -uroot -p<从 .env 读> --single-transaction --routines --triggers --events <db>
产物 workspace-<agentId>/db/<db>_<YYYYMMDD>.sql.gz + <db>_latest.sqlmain 的目录是 workspace(无 -<id> 后缀)
保留 30 天前的 .sql.gz 自动删除
同步 git add 各 workspace-<id>/db/mainworkspace/db/ 不纳入)→ commit → push Gitea
日志 workspace/db/backup.log
凭据 .envMYSQL_PWD_ROOT(缺失时回退 MYSQL_PWD)、PGPASSWORD,由脚本内部读取

旧版硬编码 DB_MAP 已废弃——脚本里只剩一句注释提到它。不要再按「改三处名单(DB_MAP / 清理循环 / git add)」的旧流程操作,那些循环现在都由动态 TARGETS 驱动。

步骤

  1. 确认库存在且归属正确:~/.openclaw/scripts/db-conn.sh <agentId> --sql "SELECT DATABASE()" 返回 <agentId> 才算通。
  2. 确认 id 在配置里:agents.entries 含该 id。
    • bash ~/.openclaw/scripts/new-agent.sh <id> <中文名> 建的 agent 两件事都会就位(建库 + 建号 + 授权 + 写 .env + 建 agent),此时无需再动备份脚本
  3. 核对覆盖情况:上次 03:00 之后看日志
    tail -30 /home/yangxuan/.openclaw/workspace/db/backup.log
    
    日志应出现 备份目标:... <db> ...,且该库有 ✅ MySQL <db> -> ... 行。
  4. 目标里缺该库时,先修根因(库不存在 / id 不在 agents.entries),不要改脚本绕过。
  5. 需要当天就见证而不等次日:执行一次备份脚本,再回看日志确认该库出现 (脚本会照常 git push,这是它设计内的行为)。

红旗

  • 备份脚本属 root:确有必要才 sudo 编辑,改前先 sudo cp 备份原件。
  • 连接口令只在 .env / 脚本内部读取;不要复制到命令参数、聊天或日志
  • docker exec 容器名固定为 mysqlPostgreSQL 部分备份容器 postgresopenclaw 库,与本流程无关。
  • 备份会自动 push 到 Gitea,属脚本设计的一部分,无需额外请示。

相关文件

  • 主脚本:/usr/local/bin/backup-agent-dbs.sh
  • 建 agent 入口:/home/yangxuan/.openclaw/scripts/new-agent.sh
  • 备份日志:/home/yangxuan/.openclaw/workspace/db/backup.log