|
| 1 | +!!! Abstract "" |
| 2 | + SQLBot 的 `sctl` **不提供** backup / restore 命令。升级、迁移前请手动备份;还原须在 **相同版本** 上进行。 |
| 3 | + |
| 4 | + 先确认当前是内置库还是外置库: |
| 5 | + |
| 6 | + ```bash |
| 7 | + grep SQLBOT_EXTERNAL_DB /opt/sqlbot/.env |
| 8 | + grep POSTGRES_SERVER /opt/sqlbot/conf/sqlbot.conf |
| 9 | + ``` |
| 10 | + |
| 11 | + - `SQLBOT_EXTERNAL_DB=false` 且 `POSTGRES_SERVER=localhost`:内置库(默认) |
| 12 | + - `SQLBOT_EXTERNAL_DB=true`,或 `POSTGRES_SERVER` 指向其他主机:外置库(含多数 1Panel 场景) |
| 13 | + |
| 14 | +## 1 需要备份什么 |
| 15 | + |
| 16 | +!!! Abstract "" |
| 17 | + 默认安装目录为 `/opt/sqlbot`。docker 一键运行时,路径相对执行目录下的 `./data`。 |
| 18 | + |
| 19 | + | 内容 | 路径 / 对象 | 说明 | |
| 20 | + | ---- | ----------- | ---- | |
| 21 | + | 元数据库 | 内置:`data/postgresql`<br>外置:外部 PostgreSQL 的 `sqlbot` 库 | 用户、工作空间、数据源、问数记录、术语、SQL 示例等 | |
| 22 | + | 业务文件 | `data/sqlbot/excel`、`data/sqlbot/file`、`data/sqlbot/images` | 与库中记录对应;日志 `logs` 可不备份 | |
| 23 | + | 配置 | `.env`、`conf/sqlbot.conf`、`docker-compose.yml` | 须与数据库成套还原;尤其保留原 `SECRET_KEY` | |
| 24 | + |
| 25 | + !!! Warning "" |
| 26 | + 外置库时,宿主机 `data/postgresql` **不是** 业务数据,请备份外部 PostgreSQL。外置库需支持向量扩展(pgvector)。 |
| 27 | + |
| 28 | +## 2 备份 |
| 29 | + |
| 30 | +### 2.1 内置库(推荐) |
| 31 | + |
| 32 | +!!! Abstract "" |
| 33 | + 停服后打包运行数据与配置,一致性最好: |
| 34 | + |
| 35 | + ```bash |
| 36 | + sctl stop |
| 37 | + |
| 38 | + tar -zcvf /opt/sqlbot-backup-$(date +%F).tar.gz \ |
| 39 | + --exclude='sqlbot/data/sqlbot/logs' \ |
| 40 | + -C /opt sqlbot/data sqlbot/conf sqlbot/.env sqlbot/docker-compose.yml |
| 41 | + |
| 42 | + sctl start |
| 43 | + ``` |
| 44 | + |
| 45 | + 无 `sctl` 时(docker 一键运行)先执行 `docker stop sqlbot`,再打包当前目录下的 `./data`,最后 `docker start sqlbot`。 |
| 46 | + |
| 47 | +### 2.2 外置库 |
| 48 | + |
| 49 | +!!! Abstract "" |
| 50 | + (1)备份外部库(连接信息以 `conf/sqlbot.conf` 为准): |
| 51 | + |
| 52 | + ```bash |
| 53 | + export PGPASSWORD='YourPassword' |
| 54 | + pg_dump -h <DB_HOST> -p 5432 -U root -d sqlbot -Fc -f ./sqlbot-$(date +%F).dump |
| 55 | + ``` |
| 56 | + |
| 57 | + 本机无客户端时: |
| 58 | + |
| 59 | + ```bash |
| 60 | + docker run --rm -e PGPASSWORD='YourPassword' \ |
| 61 | + -v $(pwd):/backup pgvector/pgvector:pg17 \ |
| 62 | + pg_dump -h <DB_HOST> -p 5432 -U root -d sqlbot -Fc -f /backup/sqlbot.dump |
| 63 | + ``` |
| 64 | + |
| 65 | + (2)再打包业务文件与配置: |
| 66 | + |
| 67 | + ```bash |
| 68 | + tar -zcvf ./sqlbot-files-$(date +%F).tar.gz \ |
| 69 | + --exclude='sqlbot/data/sqlbot/logs' \ |
| 70 | + -C /opt sqlbot/data/sqlbot sqlbot/conf sqlbot/.env sqlbot/docker-compose.yml |
| 71 | + ``` |
| 72 | + |
| 73 | + 1Panel 也可使用其 PostgreSQL 备份能力,并备份应用持久化目录中的 excel / file / images 及环境变量。 |
| 74 | + |
| 75 | +## 3 还原 |
| 76 | + |
| 77 | +!!! Abstract "" |
| 78 | + 还原前:目标环境已安装相同版本;先备份目标侧现有数据;内置库与外置库不要交叉覆盖。 |
| 79 | + |
| 80 | +### 3.1 内置库 |
| 81 | + |
| 82 | +!!! Abstract "" |
| 83 | + ```bash |
| 84 | + sctl stop |
| 85 | + mv /opt/sqlbot /opt/sqlbot-$(date +%F)-bak |
| 86 | + # 先安装相同版本后,再覆盖数据与配置 |
| 87 | + tar -zxvf /opt/sqlbot-backup-YYYY-MM-DD.tar.gz -C /opt |
| 88 | + sctl start |
| 89 | + ``` |
| 90 | + |
| 91 | + |
| 92 | +### 3.2 外置库 |
| 93 | + |
| 94 | +!!! Abstract "" |
| 95 | + ```bash |
| 96 | + export PGPASSWORD='YourPassword' |
| 97 | + psql -h <DB_HOST> -p 5432 -U root -d postgres -c "CREATE DATABASE sqlbot;" |
| 98 | + psql -h <DB_HOST> -p 5432 -U root -d sqlbot -c "CREATE EXTENSION IF NOT EXISTS vector;" |
| 99 | + pg_restore -h <DB_HOST> -p 5432 -U root -d sqlbot --clean --if-exists ./sqlbot-YYYY-MM-DD.dump |
| 100 | + ``` |
| 101 | + |
| 102 | + 再解压文件备份到运行目录,确认 `POSTGRES_*`、`SECRET_KEY` 与备份一致后执行 `sctl restart`。 |
| 103 | + |
| 104 | +## 4 还原后检查 |
| 105 | + |
| 106 | +!!! Abstract "" |
| 107 | + - `sctl status` 或 `docker ps` 正常,可用原管理员账号登录 |
| 108 | + - 抽查数据源、Excel、历史问数、术语 / SQL 示例 |
| 109 | + - 迁移后若 MCP 无图,按 [数据迁移](migration.md) 修改 `SERVER_IMAGE_HOST` |
| 110 | + - 升级场景请先完成本文备份,再执行 [离线升级](offline_upgrade.md) |
0 commit comments