..

备份和恢复脚本

本目录包含系统的备份和恢复脚本。

📋 脚本列表

数据库备份

  • 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

📦 备份内容

数据库备份文件

  1. 备份文件:db-backup-YYYYMMDD-HHMMSS.sql.gz
  2. Checksum 文件:db-backup-YYYYMMDD-HHMMSS.sql.gz.sha256
  3. 摘要文件:backup-summary-YYYYMMDD-HHMMSS.json
  4. 日志文件:backup-db-YYYYMMDD-HHMMSS.log

文件存储备份文件

  1. 备份文件:files-backup-YYYYMMDD-HHMMSS.tar.gz
  2. Checksum 文件:files-backup-YYYYMMDD-HHMMSS.tar.gz.sha256
  3. 摘要文件:backup-summary-YYYYMMDD-HHMMSS.json
  4. 日志文件: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

问题:数据库连接失败

解决方案:

  1. 检查 .env 文件中的 DATABASE_URL 是否正确
  2. 确认数据库服务正在运行
  3. 检查网络连接和防火墙设置

问题:磁盘空间不足

解决方案:

  1. 清理旧的备份文件
  2. 增加磁盘空间
  3. 使用其他磁盘作为备份目录

问题:权限不足

解决方案:

  • 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

🔐 安全建议

  1. 保护备份文件:备份文件包含敏感数据,应妥善保管
  2. 定期测试恢复:定期测试备份文件是否可以成功恢复
  3. 异地备份:将备份文件复制到其他位置或云存储
  4. 加密备份:对于敏感数据,考虑加密备份文件

📚 相关文档