Files
Cyrene/docs/pg-backup-migration.md
T
AskaEth b14d267642 feat: SearXNG 搜索集成 + DevTools Docker + PG 备份 + 文档更新
- web_search 工具/插件接入自托管 SearXNG,支持百度/必应/搜狗/360搜索
- DevTools 加入 docker-compose.dev.yml,devtools/Dockerfile
- scripts/pg-backup.sh 数据库备份恢复脚本,docs/pg-backup-migration.md
- 后台思考 + datetime 插件时区默认 Asia/Shanghai
- docker-compose 对齐 volume 名称,清理 tool-engine 残留引用
- README.md / Deploy.md 更新至当前架构(移除简报/tool-engine,新增搜索/跨端同步/DevTools)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 20:36:38 +08:00

100 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PostgreSQL 备份与迁移
## 备份脚本
`scripts/pg-backup.sh` 封装了 `pg_dump` / `psql`,跨任何 PG 版本兼容。
```bash
./scripts/pg-backup.sh backup # 备份
./scripts/pg-backup.sh restore # 从最新备份恢复
./scripts/pg-backup.sh restore <文件路径> # 恢复指定备份
```
备份文件写入 `backups/cyrene_YYYYMMDD_HHMMSS.sql`,自动保留最近 7 个。
## PG 大版本升级(16 → 17 等)
生产环境用 `docker-compose.yml`,开发环境用 `docker-compose.dev.yml`
```bash
# === 步骤 1:备份 ===
./scripts/pg-backup.sh backup
# === 步骤 2:停服并清理 ===
docker compose -f docker-compose.dev.yml down
# 删旧 volume,确保新 PG 从干净状态初始化(可选但推荐)
docker volume rm cyrene_cyrene_pg_data
# === 步骤 3:修改镜像版本 ===
# docker-compose.dev.yml 中:
# image: pgvector/pgvector:pg16 → image: pgvector/pgvector:pg17
# === 步骤 4:启动新 PG ===
docker compose -f docker-compose.dev.yml up -d postgres
# 等 healthcheck 通过
docker ps --filter name=cyrene_postgres
# === 步骤 5:恢复数据 ===
./scripts/pg-backup.sh restore
# === 步骤 6:启动全栈 ===
docker compose -f docker-compose.dev.yml up -d
```
## 版本间切换(dev.db.yml ↔ dev.yml
两个文件的 volume 名和容器名已对齐,直接切换即可,数据自动继承:
```bash
# 从轻量版切到全服务版
docker compose -f docker-compose.dev.db.yml down
docker compose -f docker-compose.dev.yml up -d
# 反向切回
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.dev.db.yml up -d
```
原有的 `cyrene_*_data` volume 会被新容器直接挂载,无需恢复。
## 跨服务器迁移
```bash
# 源服务器
./scripts/pg-backup.sh backup
scp backups/cyrene_*.sql user@target:/path/to/backups/
# 目标服务器
./scripts/pg-backup.sh restore backups/cyrene_*.sql
```
## 常见问题
### 新版 PG 启动后不接受旧 volume
`pg_upgrade` 要求 in-place 升级必须用 PG 自带的升级工具,不能直接挂旧数据目录。如果没删旧 volume 导致启动失败:
```bash
docker logs cyrene_postgres # 会提示 data directory incompatible
docker compose down
docker volume rm cyrene_cyrene_pg_data
docker compose up -d
./scripts/pg-backup.sh restore
```
### 备份文件过大
`pg_dump` 产生的 `.sql` 文件包含全部数据,如果数据库过大可以考虑:
```bash
# 仅导出结构,不导出日志/缓存表
docker exec cyrene_postgres pg_dump -U cyrene -d cyrene_ai \
--schema-only > schema.sql
# 按表分别导出
docker exec cyrene_postgres pg_dump -U cyrene -d cyrene_ai \
-t memories -t sessions -t users > core_tables.sql
```