跳转到内容

备份与恢复

Glean 的数据存储在以下位置:

数据类型存储位置重要性
数据库PostgreSQL (postgres_data volume)关键
缓存Redis (redis_data volume)可选
日志glean_logs volume可选
向量数据Milvus volumes(完整版)重要
Terminal window
# 备份 PostgreSQL 数据库
docker exec glean-postgres pg_dump -U glean glean | gzip > glean_db_$(date +%Y%m%d_%H%M%S).sql.gz

创建备份脚本 backup-glean.sh

#!/bin/bash
BACKUP_DIR="$HOME/glean-backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# 备份 PostgreSQL
docker exec glean-postgres pg_dump -U glean glean | gzip > "$BACKUP_DIR/glean_db_$DATE.sql.gz"
# 备份 PostgreSQL 数据卷
docker run --rm \
-v glean_postgres_data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/postgres_data_$DATE.tar.gz -C /data .
# 备份 Redis 数据卷
docker run --rm \
-v glean_redis_data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/redis_data_$DATE.tar.gz -C /data .
# 清理 7 天前的备份
find "$BACKUP_DIR" -name "*.gz" -mtime +7 -delete
echo "Backup completed: $BACKUP_DIR"

设置执行权限并运行:

Terminal window
chmod +x backup-glean.sh
./backup-glean.sh

使用 cron 设置每日备份:

Terminal window
# 编辑 crontab
crontab -e
# 添加每日凌晨 2 点备份
0 2 * * * /path/to/backup-glean.sh
Terminal window
# 停止服务
docker compose down
# 启动数据库
docker compose up -d postgres
# 等待数据库就绪
sleep 10
# 恢复数据
gunzip -c glean_db_20250101_020000.sql.gz | docker exec -i glean-postgres psql -U glean -d glean
# 启动所有服务
docker compose up -d
Terminal window
# 停止服务
docker compose down
# 删除旧卷
docker volume rm glean_postgres_data
# 创建新卷
docker volume create glean_postgres_data
# 恢复数据
docker run --rm \
-v glean_postgres_data:/data \
-v "$HOME/glean-backups":/backup \
alpine tar xzf /backup/postgres_data_20250101_020000.tar.gz -C /data
# 启动服务
docker compose up -d

完整版本还需要备份 Milvus 数据:

#!/bin/bash
BACKUP_DIR="$HOME/glean-backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# 备份 PostgreSQL
docker exec glean-postgres pg_dump -U glean glean | gzip > "$BACKUP_DIR/glean_db_$DATE.sql.gz"
# 备份所有数据卷
for volume in postgres_data redis_data milvus_etcd_data milvus_minio_data milvus_data; do
docker run --rm \
-v glean_${volume}:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/${volume}_$DATE.tar.gz -C /data .
done
echo "Full backup completed: $BACKUP_DIR"

在旧服务器上:

Terminal window
# 备份数据库
docker exec glean-postgres pg_dump -U glean glean | gzip > glean_backup.sql.gz
# 导出 OPML(可选,用户级别)
# 通过 Web 界面导出

在新服务器上:

Terminal window
# 部署 Glean
curl -fsSL https://raw.githubusercontent.com/LeslieLeung/glean/main/docker-compose.yml -o docker-compose.yml
docker compose up -d
# 等待数据库就绪
sleep 30
# 恢复数据
gunzip -c glean_backup.sql.gz | docker exec -i glean-postgres psql -U glean -d glean
# 重启服务
docker compose restart
策略频率保留时间说明
每日备份每天7 天SQL 备份
每周备份每周4 周完整卷备份
每月备份每月12 个月归档备份

定期验证备份的完整性:

Terminal window
# 检查备份文件
gunzip -t glean_db_*.sql.gz
# 在测试环境恢复验证
docker compose -f docker-compose.test.yml up -d
# 恢复并验证数据