备份和恢复脚本
本目录包含系统的备份和恢复脚本。
📋 脚本列表
数据库备份
backup-db.sh- Linux/Mac 数据库备份脚本backup-db.ps1- Windows PowerShell 数据库备份脚本test-backup-db.sh- Linux/Mac 备份测试脚本test-backup-db.ps1- Windows PowerShell 备份测试脚本
文件存储备份
backup-files.sh- Linux/Mac 文件存储备份脚本backup-files.ps1- Windows PowerShell 文件存储备份脚本
🚀 使用方法
Linux/Mac
执行数据库备份
# 使用默认备份目录 (./backups/database)
./scripts/backup-db.sh
# 指定备份目录
./scripts/backup-db.sh /path/to/backup
执行文件存储备份
# 使用默认备份目录 (./backups/files)
./scripts/backup-files.sh
# 指定备份目录
./scripts/backup-files.sh /path/to/backup
# 设置 MinIO 数据目录
MINIO_DATA_DIR=/path/to/minio-data ./scripts/backup-files.sh
测试备份
# 执行测试
./scripts/test-backup-db.sh
Windows PowerShell
执行数据库备份
# 使用默认备份目录 (.\backups\database)
.\scripts\backup-db.ps1
# 指定备份目录
.\scripts\backup-db.ps1 -BackupDir "C:\backups\database"
执行文件存储备份
# 使用默认备份目录 (.\backups\files)
.\scripts\backup-files.ps1
# 指定备份目录和 MinIO 数据目录
.\scripts\backup-files.ps1 -BackupDir "C:\backups\files" -MinioDataDir "C:\minio-data"
测试备份
# 执行测试
.\scripts\test-backup-db.ps1
📦 备份内容
数据库备份文件
- 备份文件:
db-backup-YYYYMMDD-HHMMSS.sql.gz - Checksum 文件:
db-backup-YYYYMMDD-HHMMSS.sql.gz.sha256 - 摘要文件:
backup-summary-YYYYMMDD-HHMMSS.json - 日志文件:
backup-db-YYYYMMDD-HHMMSS.log
文件存储备份文件
- 备份文件:
files-backup-YYYYMMDD-HHMMSS.tar.gz - Checksum 文件:
files-backup-YYYYMMDD-HHMMSS.tar.gz.sha256 - 摘要文件:
backup-summary-YYYYMMDD-HHMMSS.json - 日志文件:
backup-files-YYYYMMDD-HHMMSS.log
⚙️ 环境要求
Linux/Mac
- PostgreSQL 客户端工具(pg_dump, psql)
- gzip
- bash
Windows
- PostgreSQL 客户端工具(pg_dump, psql)
- 7-Zip 或 gzip
- PowerShell 5.0+
🔧 配置
数据库备份配置
脚本会从 .env 文件读取数据库连接信息:
DATABASE_URL="postgresql://user:password@host:port/database"
文件存储备份配置
设置 MinIO 数据目录(默认:./minio-data):
# Linux/Mac
export MINIO_DATA_DIR=/path/to/minio-data
# Windows PowerShell
$env:MINIO_DATA_DIR="C:\path\to\minio-data"
📊 备份策略
- 自动保留最近 7 个备份
- 超过 7 个备份时,自动删除最旧的备份
- 备份前检查磁盘空间(需要至少 2 倍数据库大小的空间)
- 备份后验证文件完整性
🔍 故障排查
问题:pg_dump 命令未找到
解决方案:安装 PostgreSQL 客户端工具
- Linux:
sudo apt-get install postgresql-client - Mac:
brew install postgresql - Windows: 下载并安装 PostgreSQL
问题:数据库连接失败
解决方案:
- 检查
.env文件中的DATABASE_URL是否正确 - 确认数据库服务正在运行
- 检查网络连接和防火墙设置
问题:磁盘空间不足
解决方案:
- 清理旧的备份文件
- 增加磁盘空间
- 使用其他磁盘作为备份目录
问题:权限不足
解决方案:
- Linux/Mac: 使用
chmod +x scripts/*.sh添加执行权限 - Windows: 以管理员身份运行 PowerShell
📝 示例输出
========================================
数据库备份脚本
========================================
[2025-12-13 10:00:00] 检查依赖...
[2025-12-13 10:00:00] ✅ 依赖检查通过
[2025-12-13 10:00:01] 验证数据库连接...
[2025-12-13 10:00:01] ✅ 数据库连接成功
[2025-12-13 10:00:01] 创建备份目录: ./backups/database
[2025-12-13 10:00:01] ✅ 备份目录已创建
[2025-12-13 10:00:01] 检查磁盘空间...
[2025-12-13 10:00:02] 数据库大小: 150 MB
[2025-12-13 10:00:02] 可用空间: 10240 MB
[2025-12-13 10:00:02] 需要空间: 300 MB
[2025-12-13 10:00:02] ✅ 磁盘空间充足
[2025-12-13 10:00:02] 开始备份数据库...
[2025-12-13 10:00:02] 备份文件: db-backup-20251213-100002.sql.gz
[2025-12-13 10:00:45] ✅ 备份完成,耗时: 43 秒
[2025-12-13 10:00:45] 验证备份文件...
[2025-12-13 10:00:45] 备份文件大小: 25M
[2025-12-13 10:00:46] ✅ 备份文件完整性验证通过
[2025-12-13 10:00:46] ✅ Checksum: a1b2c3d4...
[2025-12-13 10:00:46] 清理旧备份...
[2025-12-13 10:00:46] 当前有 3 个备份,无需清理
[2025-12-13 10:00:46] 生成备份摘要...
[2025-12-13 10:00:46] ✅ 备份摘要已生成
========================================
[2025-12-13 10:00:46] 🎉 备份成功完成!
========================================
备份文件: ./backups/database/db-backup-20251213-100002.sql.gz
日志文件: ./backups/database/backup-db-20251213-100002.log
🔐 安全建议
- 保护备份文件:备份文件包含敏感数据,应妥善保管
- 定期测试恢复:定期测试备份文件是否可以成功恢复
- 异地备份:将备份文件复制到其他位置或云存储
- 加密备份:对于敏感数据,考虑加密备份文件
📚 相关文档
- 部署指南(待创建)
- 运维指南(待创建)
- Phase 10 任务清单