b14d267642
- 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>
100 lines
2.7 KiB
Markdown
100 lines
2.7 KiB
Markdown
# 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
|
||
```
|