3.4 KiB
3.4 KiB
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.sh(root 所有,需 sudo 编辑) |
| 触发 | crontab:0 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 ...用的是容器名mysql;PostgreSQL 部分是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 映射」