3.1 KiB
3.1 KiB
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 改造后,实测)
| 项 | 内容 |
|---|---|
| 触发 | crontab:0 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.sql;main 的目录是 workspace(无 -<id> 后缀) |
| 保留 | 30 天前的 .sql.gz 自动删除 |
| 同步 | git add 各 workspace-<id>/db/(main 的 workspace/db/ 不纳入)→ commit → push Gitea |
| 日志 | workspace/db/backup.log |
| 凭据 | .env 的 MYSQL_PWD_ROOT(缺失时回退 MYSQL_PWD)、PGPASSWORD,由脚本内部读取 |
旧版硬编码
DB_MAP已废弃——脚本里只剩一句注释提到它。不要再按「改三处名单(DB_MAP / 清理循环 / git add)」的旧流程操作,那些循环现在都由动态TARGETS驱动。
步骤
- 确认库存在且归属正确:
~/.openclaw/scripts/db-conn.sh <agentId> --sql "SELECT DATABASE()"返回<agentId>才算通。 - 确认 id 在配置里:
agents.entries含该 id。- 用
bash ~/.openclaw/scripts/new-agent.sh <id> <中文名>建的 agent 两件事都会就位(建库 + 建号 + 授权 + 写.env+ 建 agent),此时无需再动备份脚本。
- 用
- 核对覆盖情况:上次 03:00 之后看日志
日志应出现
tail -30 /home/yangxuan/.openclaw/workspace/db/backup.log备份目标:... <db> ...,且该库有✅ MySQL <db> -> ...行。 - 目标里缺该库时,先修根因(库不存在 / id 不在
agents.entries),不要改脚本绕过。 - 需要当天就见证而不等次日:执行一次备份脚本,再回看日志确认该库出现
✅(脚本会照常 git push,这是它设计内的行为)。
红旗
- 备份脚本属 root:确有必要才
sudo编辑,改前先sudo cp备份原件。 - 连接口令只在
.env/ 脚本内部读取;不要复制到命令参数、聊天或日志。 docker exec容器名固定为mysql;PostgreSQL 部分备份容器postgres的openclaw库,与本流程无关。- 备份会自动 push 到 Gitea,属脚本设计的一部分,无需额外请示。
相关文件
- 主脚本:
/usr/local/bin/backup-agent-dbs.sh - 建 agent 入口:
/home/yangxuan/.openclaw/scripts/new-agent.sh - 备份日志:
/home/yangxuan/.openclaw/workspace/db/backup.log