Story 001.005: 数据库备份和恢复工具集成
Status
Ready for Review
Story
As a 系统管理员
I want 可靠的数据库备份和恢复功能
so that 在数据丢失或系统故障时能够快速恢复服务
Acceptance Criteria
Tasks / Subtasks
Dev Notes
技术栈 [Source: architecture/infrastructure-deployment.md#数据库备份策略]
- 调度工具: node-cron
- 备份工具: pg-dump-restore npm包(封装pg_dump/pg_restore)
- 存储位置: ./backups/ 目录
- 日志记录: 使用现有debug日志系统(src/server/utils/logger.ts)
- 依赖: 需要安装 pg-dump-restore@1.0.13 包
备份策略 [Source: architecture/infrastructure-deployment.md#数据库备份策略]
- 频率: 每日凌晨2点执行完整备份
- 保留: 最近7天的每日备份
- 格式: 自定义格式(-Fc)用于快速恢复
- 存储: 本地文件系统,避免外部依赖
- 安全: 备份文件权限设置为仅管理员可访问(chmod 600)
监控集成 [Source: 现有日志系统]
- 日志记录: 使用现有debug日志系统(src/server/utils/logger.ts)
- 监控指标:
- 备份成功/失败状态
- 备份文件大小和生成时间
- 磁盘空间使用情况
- 备份恢复成功率
- 告警规则:
- 备份失败时发送邮件通知
- 磁盘空间不足时告警
- 备份文件异常时告警
- 集成方式: 通过现有logger.error()记录错误日志,监控系统需要配置为收集这些日志(当前logger基于debug包,主要用于开发环境)
文件结构
项目根目录/
src/server/
utils/
backup.ts # 主备份脚本
restore.ts # 恢复脚本
__tests__/
backup.test.ts # 备份单元测试
__integration_tests__/
backup.integration.test.ts # 备份集成测试
backups/ # 备份文件存储目录
daily/ # 每日备份
环境变量配置
需要配置以下环境变量:
# 数据库连接配置(使用现有环境变量名)
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=postgres
DB_USERNAME=postgres
DB_PASSWORD=postgres
# 备份调度配置
BACKUP_SCHEDULE="0 2 * * *" # 每天凌晨2点
BACKUP_RETENTION_DAYS=7
BACKUP_DIR="./backups"
# 监控配置(可选)
MONITORING_ENABLED=false
ALERT_EMAIL=admin@example.com
安全要求:
- 数据库密码必须通过环境变量或密钥管理服务传递
- 生产环境禁止使用默认凭据
- 敏感配置必须加密存储
测试要求
- 单元测试覆盖所有备份逻辑
- 集成测试验证备份文件生成和恢复
- E2E测试确保整个备份恢复流程正常工作
- 测试覆盖率 > 70%
Testing
测试标准 [Source: architecture/testing-strategy.md]
- 使用Vitest进行单元和集成测试
- 单元测试文件位于
src/**/__tests__/ 目录
- 集成测试文件位于
src/**/__integration_tests__/ 目录
- 遵循现有测试模式和结构
测试场景
- 正常备份流程测试
- 恢复功能验证
- 异常场景测试(磁盘空间不足、权限错误等)
- 性能影响评估
Change Log
| Date |
Version |
Description |
Author |
| 2025-09-19 |
v1.0 |
初始故事创建 |
Bob |
| 2025-09-19 |
v1.1 |
根据PO建议完善环境变量和监控集成 |
Bob |
| 2025-09-19 |
v1.2 |
根据开发者反馈修复文件结构重复、环境变量冲突、调整测试覆盖率 |
Bob |
| 2025-09-19 |
v1.3 |
根据开发者建议添加包版本号、明确权限设置、澄清监控集成 |
Bob |
| 2025-09-19 |
v1.4 |
根据代码结构调整更新备份集成位置说明 |
Bob |
Dev Agent Record
Agent Model Used
Claude Code d8d-model
Debug Log References
- 备份功能测试成功,生成备份文件大小: 20.72 KB
- 文件权限正确设置为 600 (仅管理员可访问)
- 调度器已集成到应用启动流程中
Completion Notes List
- ✅ 安装 pg-dump-restore@1.0.13 包
- ✅ 创建备份脚本 backup.ts 包含完整功能
- ✅ 创建恢复脚本 restore.ts 支持备份管理和恢复
- ✅ 创建 backups 目录并设置正确权限
- ✅ 集成 node-cron 调度到 api.ts 服务器启动流程
- ✅ 实现备份清理策略(自动删除7天前备份)
- ✅ 创建单元测试和集成测试
- ✅ 更新 package.json 添加备份相关命令
- ✅ 验证备份和恢复功能正常工作
File List
- src/server/utils/backup.ts - 主备份脚本
- src/server/utils/restore.ts - 恢复脚本
- src/server/utils/tests/backup.test.ts - 备份单元测试
- src/server/utils/tests/restore.test.ts - 恢复单元测试
- src/server/utils/integration_tests/backup.integration.test.ts - 集成测试
- src/server/api.ts - 集成备份调度器
- package.json - 添加备份相关脚本命令
- backups/ - 备份文件存储目录
QA Results