Files
qihuo/docs/BACKUP.md
T
dekun 52aca456e9 Add PostgreSQL production backend to eliminate SQLite lock contention.
Support DATABASE_URL with connection pooling, pg_dump backups, SQLite migration script, and deploy_postgres.sh with docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 08:11:42 +08:00

146 lines
4.3 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.
# 数据备份与恢复
qihuo 支持自动备份数据库与复盘附件,生成可在其他 Linux 服务器恢复的压缩包。
存储后端由 `.env` 决定:
| 后端 | 备份包内主文件 | 说明 |
|------|----------------|------|
| SQLite(默认) | `futures.db` | 本地单文件库 |
| PostgreSQL | `postgres_dump.sql` | `pg_dump` 逻辑备份 |
PostgreSQL 部署与迁移见 **[POSTGRES.md](./POSTGRES.md)**。
---
## 备份内容
| 内容 | 说明 |
|------|------|
| `futures.db` | SQLite 主库(仅 SQLite 模式) |
| `postgres_dump.sql` | PostgreSQL 逻辑备份(仅 PostgreSQL 模式) |
| `uploads/` | 复盘截图、自动 K 线图(若存在) |
| `manifest.json` | 备份时间、**backend** 字段、文件清单 |
| `RESTORE.md` | 包内恢复说明 |
| `restore.sh` | 一键恢复脚本 |
**不包含** `.env`(含 CTP 密码、`DATABASE_URL` 等),请单独安全保管或在新服务器重新配置。
---
## 备份目录
默认:**`/root/qihuo_backup`**
可通过环境变量覆盖:
```bash
# /opt/qihuo/.env 或 systemd/PM2 环境
QIHUO_BACKUP_DIR=/data/qihuo_backup
```
---
## 系统设置页
路径:**系统设置 → 数据备份与恢复**
- **立即备份**:后台生成 `qihuo_backup_YYYYMMDD_HHMMSS.tar.gz`
- **每日自动备份**:默认每天 **03:00**Asia/Shanghai)执行
- **保留份数**:默认保留最近 **30** 份,超出自动删除最旧文件
- **下载**:列表中点击「下载」获取压缩包
PostgreSQL 模式下需服务器已安装 `pg_dump``apt install postgresql-client` 或完整 `postgresql` 包)。
---
## 在新服务器恢复
### 方式一:使用包内脚本(推荐)
```bash
# 1. 上传压缩包到目标机
scp qihuo_backup_20260626_030015.tar.gz root@新服务器:/root/
# 2. 解压并恢复
cd /root
tar -xzf qihuo_backup_20260626_030015.tar.gz
cd qihuo_backup_20260626_030015
chmod +x restore.sh
# SQLite:直接恢复 futures.db
RESTORE_DIR=/opt/qihuo ./restore.sh
# PostgreSQL:先配置 /opt/qihuo/.env 的 DATABASE_URL,再执行
export RESTORE_DIR=/opt/qihuo
# 若 .env 在 RESTORE_DIR 下且含 DATABASE_URLrestore.sh 会自动 source
./restore.sh
```
默认恢复到 **`/root/qihuo`**。若生产目录为 `/opt/qihuo`
```bash
RESTORE_DIR=/opt/qihuo ./restore.sh
```
### 方式二:手工复制(SQLite)
```bash
tar -xzf qihuo_backup_20260626_030015.tar.gz
cd qihuo_backup_20260626_030015
pm2 stop qihuo
cp futures.db /opt/qihuo/futures.db
cp -a uploads/. /opt/qihuo/uploads/
pm2 restart qihuo
```
### 方式三:手工导入(PostgreSQL
```bash
pm2 stop qihuo
export DATABASE_URL=postgresql://qihuo:密码@127.0.0.1:5432/qihuo
psql "$DATABASE_URL" -f postgres_dump.sql
cp -a uploads/. /opt/qihuo/uploads/
pm2 restart qihuo
```
### 恢复后检查清单
1. 已部署 qihuo 代码与 Python 虚拟环境(见 [DEPLOY.md](./DEPLOY.md)
2. 已配置 `.env``DATABASE_URL` 或 SQLite、`SECRET_KEY`、CTP 账号等)
3. PostgreSQL:库已创建且 `DATABASE_URL` 可连接
4. 访问 Web 登录,检查交易记录、统计页是否正常
5. CTP 模式需在新环境重新连接柜台
---
## 注意事项
- **恢复前务必停止 qihuo**,避免进程占用数据库导致覆盖不完整
- SQLite 备份使用 SQLite `backup` API,并在 WAL 模式下尝试 checkpoint
- PostgreSQL 备份使用 `pg_dump`,恢复使用 `psql -f`
- 自动备份在应用后台线程执行,与 Web 服务同进程
- 大体积 `uploads/` 会使压缩包变大,可按需定期清理无用截图
- 不要将含 `.env`、数据库的压缩包上传到公开网盘
---
## 故障排查
| 现象 | 处理 |
|------|------|
| 设置页无备份列表 | 检查 `/root/qihuo_backup` 目录权限,进程需可写 |
| 立即备份无反应 | 查看 PM2 日志;可能上一任务仍在进行 |
| PostgreSQL 备份失败 | 安装 `postgresql-client`;检查 `DATABASE_URL` |
| 下载 404 | 文件名须为系统生成的 `qihuo_backup_*.tar.gz` |
| 恢复后无法登录 | 确认数据已导入实际使用的库(SQLite 文件或 PG) |
| 恢复后 CTP 连不上 | 在新服务器配置正确的 `.env` CTP 参数 |
---
## 相关文档
- [POSTGRES.md](./POSTGRES.md) — PostgreSQL 一键部署、迁移、备份恢复
- [DEPLOY.md](./DEPLOY.md) — 部署与目录结构
- [FEATURES.md](./FEATURES.md) — 功能与路由一览