auto: sync OpenClaw config 2026-09-16 22:13
This commit is contained in:
@@ -1,82 +1,50 @@
|
||||
---
|
||||
name: "db-backup-enroll"
|
||||
description: "新建带数据库的 agent 时,自动把其库加入每日备份脚本 backup-agent-dbs.sh,保证所有本地库被 crontab 03:00 备份。"
|
||||
description: "新建带库 agent 后核对每日 03:00 备份是否覆盖其库(backup-agent-dbs.sh 动态发现,无需改脚本)。"
|
||||
---
|
||||
|
||||
# DB Backup Enroll — 新建 agent 自动加入数据库备份
|
||||
# DB Backup Enroll — 新 agent 的库是否已被每日备份覆盖
|
||||
|
||||
## 目的
|
||||
|
||||
本地 Docker MySQL 有一套每日 03:00 自动备份机制(crontab + `/usr/local/bin/backup-agent-dbs.sh`)。**每当新建一个带数据库的 agent,必须把它的库加进这个备份脚本**,否则新库不会被备份,存在数据丢失风险。
|
||||
本地 Docker MySQL 有每日 03:00 自动备份(crontab + `/usr/local/bin/backup-agent-dbs.sh`)。新建带库 agent 后,**核对**其库已被自动覆盖;缺了就修根因,不要手工往脚本里塞库名。
|
||||
|
||||
## 核心脚本与机制
|
||||
## 机制(2026-09-16 改造后,实测)
|
||||
|
||||
| 项 | 内容 |
|
||||
|----|------|
|
||||
| 备份脚本 | `/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 远程 |
|
||||
| 目标发现 | **动态**:`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`,由脚本内部读取 |
|
||||
|
||||
## 需要备份的 MySQL 库(本地 Docker 实例 127.0.0.1:3306)
|
||||
> 旧版硬编码 `DB_MAP` 已废弃——脚本里只剩一句注释提到它。**不要再按「改三处名单(DB_MAP / 清理循环 / git add)」的旧流程操作**,那些循环现在都由动态 `TARGETS` 驱动。
|
||||
|
||||
当前 DB_MAP(脚本内)已覆盖:main / resume / travel / fitness / finances / wellness / juaner / tab。
|
||||
## 步骤
|
||||
|
||||
⚠️ **任何新建带库 agent,其库必须加入此映射。**
|
||||
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 之后看日志
|
||||
```bash
|
||||
tail -30 /home/yangxuan/.openclaw/workspace/db/backup.log
|
||||
```
|
||||
日志应出现 `备份目标:... <db> ...`,且该库有 `✅ MySQL <db> -> ...` 行。
|
||||
4. 目标里缺该库时,先修根因(库不存在 / id 不在 `agents.entries`),不要改脚本绕过。
|
||||
5. 需要当天就见证而不等次日:执行一次备份脚本,再回看日志确认该库出现 `✅`(脚本会照常 git push,这是它设计内的行为)。
|
||||
|
||||
## 标准操作流程
|
||||
## 红旗
|
||||
|
||||
### 1. 新增 agent 后——把库加入备份(核心步骤)
|
||||
|
||||
用 sudo 精确编辑 `/usr/local/bin/backup-agent-dbs.sh`,**三处都要改**(缺一不可):
|
||||
|
||||
**(a) 扩展 `DB_MAP`**(脚本中部):
|
||||
```bash
|
||||
declare -A DB_MAP=(
|
||||
...
|
||||
["<库名>"]="workspace-<agentId>" # 新增这一行
|
||||
)
|
||||
```
|
||||
|
||||
**(b) 扩展清理循环名单**(`for WS in workspace ...` 一行):
|
||||
```bash
|
||||
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 ...` 一行):
|
||||
```bash
|
||||
for WS in resume travel fitness finances wellness juaner tab sql; do
|
||||
# 把 <agentId> 追加进去
|
||||
```
|
||||
|
||||
### 2. 语法与功能验证
|
||||
|
||||
```bash
|
||||
sudo bash -n /usr/local/bin/backup-agent-dbs.sh # 语法检查
|
||||
# 手动测试该库能否备份(不触发整个脚本的 git push)
|
||||
# 连接口令从脚本内读取到变量,勿明文写入命令行/聊天/日志
|
||||
docker exec mysql mysqldump -uroot -p"$DB_PW" --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)` 备份。
|
||||
- 脚本内的连接口令只存在于主机脚本;**不要复制到命令参数、聊天或日志**,需要用连接时在脚本内部读取。
|
||||
- `docker exec mysql ...` 用的是容器名 `mysql`;PostgreSQL 部分是 `postgres` 容器 `openclaw` 库,无需动(除非新增 PG 库)。
|
||||
- 备份会自动 git push 到 Gitea——这是脚本设计的一部分,属授权操作,无需额外请示。
|
||||
- 备份脚本属 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`
|
||||
- 数据库映射定义:`MEMORY.md` →「🐬 本地数据库环境(Docker MySQL)」→「本地库 ↔ Agent 映射」
|
||||
|
||||
Reference in New Issue
Block a user