# 备份和恢复脚本 本目录包含系统的备份和恢复脚本。 ## 📋 脚本列表 ### 数据库备份 - `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 #### 执行数据库备份 ```bash # 使用默认备份目录 (./backups/database) ./scripts/backup-db.sh # 指定备份目录 ./scripts/backup-db.sh /path/to/backup ``` #### 执行文件存储备份 ```bash # 使用默认备份目录 (./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 ``` #### 测试备份 ```bash # 执行测试 ./scripts/test-backup-db.sh ``` ### Windows PowerShell #### 执行数据库备份 ```powershell # 使用默认备份目录 (.\backups\database) .\scripts\backup-db.ps1 # 指定备份目录 .\scripts\backup-db.ps1 -BackupDir "C:\backups\database" ``` #### 执行文件存储备份 ```powershell # 使用默认备份目录 (.\backups\files) .\scripts\backup-files.ps1 # 指定备份目录和 MinIO 数据目录 .\scripts\backup-files.ps1 -BackupDir "C:\backups\files" -MinioDataDir "C:\minio-data" ``` #### 测试备份 ```powershell # 执行测试 .\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` 文件读取数据库连接信息: ```env DATABASE_URL="postgresql://user:password@host:port/database" ``` ### 文件存储备份配置 设置 MinIO 数据目录(默认:`./minio-data`): ```bash # 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. **加密备份**:对于敏感数据,考虑加密备份文件 ## 📚 相关文档 - [部署指南](../docs/部署指南.md)(待创建) - [运维指南](../docs/运维指南.md)(待创建) - [Phase 10 任务清单](../../.kiro/specs/生产就绪/任务清单.md)