备份恢复.md 14 KB

备份恢复

本文引用的文件

  • server/src/config/index.ts
  • server/prisma/schema.prisma
  • server/src/services/storage.service.ts
  • server/src/services/oss.service.ts
  • server/deploy-auto.sh
  • server/deploy-simple.sh
  • deploy-prod.sh
  • server/prisma/migrations/migration_lock.toml

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向AI有声书生成平台,提供一套完整的备份与恢复方案,覆盖数据库(MySQL)、文件存储(本地/阿里云OSS)以及配置文件等关键资产。内容包括:

  • 备份策略:全量与增量备份的时机、频率与存储位置
  • 数据验证:备份完整性校验与一致性检查
  • 安全与合规:传输加密与安全存储
  • 灾难恢复:恢复流程、RTO/RPO目标与业务连续性保障
  • 自动化:备份与恢复脚本、恢复测试与演练
  • 监控与告警:备份状态监控、异常处理与告警联动

项目结构

围绕备份与恢复的关键目录与文件如下:

  • 数据库:Prisma Schema定义与迁移锁文件
  • 应用配置:运行时配置与上传目录
  • 文件存储:统一存储服务(本地/阿里云OSS)
  • 部署与备份:生产部署脚本中包含服务器侧备份逻辑

    graph TB
    subgraph "应用层"
    APP["后端应用<br/>server/src/app.ts"]
    CFG["配置模块<br/>server/src/config/index.ts"]
    STORE["存储服务<br/>server/src/services/storage.service.ts"]
    OSS["OSS服务<br/>server/src/services/oss.service.ts"]
    end
    subgraph "数据层"
    PRISMA["Prisma Schema<br/>server/prisma/schema.prisma"]
    MYSQL["MySQL 数据库"]
    MIGLOCK["迁移锁<br/>server/prisma/migrations/migration_lock.toml"]
    end
    subgraph "文件存储"
    LOCAL["本地上传目录<br/>process.cwd()/uploads"]
    ALI["阿里云OSS Bucket"]
    end
    subgraph "部署与备份"
    DPROD["生产部署脚本<br/>deploy-prod.sh"]
    DAUTO["自动部署脚本<br/>server/deploy-auto.sh"]
    DSIM["简化部署脚本<br/>server/deploy-simple.sh"]
    end
    APP --> CFG
    APP --> STORE
    STORE --> OSS
    STORE --> LOCAL
    APP --> PRISMA
    PRISMA --> MYSQL
    DPROD --> MYSQL
    DPROD --> LOCAL
    DAUTO --> MYSQL
    DSIM --> MYSQL
    

图表来源

  • server/src/config/index.ts:113-117
  • server/prisma/schema.prisma:1-10
  • server/src/services/storage.service.ts:198-213
  • server/src/services/oss.service.ts:18-30
  • deploy-prod.sh:88-95
  • server/deploy-auto.sh:47-53

章节来源

  • server/src/config/index.ts:113-117
  • server/prisma/schema.prisma:1-10
  • server/src/services/storage.service.ts:198-213
  • server/src/services/oss.service.ts:18-30
  • deploy-prod.sh:88-95
  • server/deploy-auto.sh:47-53

核心组件

  • 数据库(MySQL):通过Prisma Schema定义表结构,使用环境变量DATABASE_URL连接;迁移锁文件确保迁移过程一致性。
  • 文件存储(本地/OSS):统一存储服务支持两种后端,自动切换;本地存储默认上传目录位于应用根目录的uploads子目录。
  • 配置与部署:应用配置集中于config模块;生产部署脚本在服务器侧执行备份与部署。

章节来源

  • server/prisma/schema.prisma:1-10
  • server/src/config/index.ts:113-117
  • server/src/services/storage.service.ts:198-213
  • server/src/services/oss.service.ts:18-30

架构总览

备份与恢复涉及以下关键路径:

  • 数据库备份:在部署前对数据库进行备份(生产脚本包含服务器侧备份步骤)
  • 文件存储备份:在部署前对上传目录进行备份(生产脚本包含服务器侧备份步骤)
  • 配置文件备份:生产脚本会复制生产环境配置到运行时环境文件
  • 恢复验证:部署完成后进行关键文件存在性检查与服务健康检查

    sequenceDiagram
    participant CI as "CI/运维"
    participant REM as "远端服务器"
    participant DB as "MySQL"
    participant FS as "文件系统"
    participant APP as "后端应用"
    CI->>REM : "执行生产部署脚本"
    REM->>REM : "创建备份目录"
    REM->>DB : "备份数据库部署前"
    REM->>FS : "备份上传目录部署前"
    REM->>REM : "解压并替换服务与前端"
    REM->>APP : "复制生产配置(.env.production -> .env)"
    REM->>APP : "生成Prisma客户端"
    REM->>APP : "启动PM2服务"
    REM->>APP : "健康检查"
    APP-->>REM : "返回健康状态"
    REM-->>CI : "部署完成"
    

图表来源

  • deploy-prod.sh:88-127
  • deploy-prod.sh:140-164

章节来源

  • deploy-prod.sh:88-127
  • deploy-prod.sh:140-164

详细组件分析

数据库备份与恢复

  • 连接与结构
    • 数据库类型:MySQL
    • 连接字符串来源:环境变量DATABASE_URL
    • 表结构定义:Prisma Schema
    • 迁移一致性:迁移锁文件
  • 备份策略
    • 全量备份:在每次生产部署前执行一次数据库全量备份
    • 增量备份:建议结合数据库二进制日志(binlog)进行增量备份(需数据库侧配置)
    • 存储位置:服务器本地备份目录(部署脚本创建)
  • 恢复流程
    • 从最近一次全量备份与对应增量备份恢复
    • 恢复后执行Prisma迁移以确保Schema一致性
  • RTO/RPO

    • RPO取决于增量备份频率;建议按小时级别
    • RTO取决于备份介质与恢复脚本执行效率

      flowchart TD
      Start(["开始备份"]) --> CheckLock["检查迁移锁文件"]
      CheckLock --> LockOK{"迁移锁正常?"}
      LockOK --> |否| Abort["中止并告警"]
      LockOK --> |是| DumpDB["执行数据库全量备份"]
      DumpDB --> BackupUploads["备份上传目录"]
      BackupUploads --> Store["写入服务器备份目录"]
      Store --> Done(["完成"])
      Abort --> Done
      

图表来源

  • deploy-prod.sh:88-95
  • server/prisma/migrations/migration_lock.toml:1-3

章节来源

  • server/prisma/schema.prisma:1-10
  • deploy-prod.sh:88-95
  • server/prisma/migrations/migration_lock.toml:1-3

文件存储备份与恢复

  • 存储后端
    • 本地存储:默认上传目录为应用根目录下的uploads
    • 阿里云OSS:通过OSS服务封装,支持上传、删除、签名URL等
  • 备份策略
    • 全量备份:在部署前对uploads目录进行拷贝备份
    • 增量备份:可基于rsync或OSS对象版本控制进行增量同步
    • 存储位置:服务器本地备份目录
  • 恢复流程
    • 将备份目录恢复至原路径
    • 若使用OSS,需确保桶内对象完整且可访问
  • RTO/RPO

    • RPO取决于增量同步频率;建议按小时级别
    • RTO取决于对象数量与网络带宽

      flowchart TD
      S(["开始文件备份"]) --> DetectStore{"存储类型?"}
      DetectStore --> |本地| LocalBackup["拷贝本地uploads目录"]
      DetectStore --> |OSS| OSSBackup["列举并备份OSS对象"]
      LocalBackup --> SaveLocal["保存至服务器备份目录"]
      OSSBackup --> SaveOSS["保存至服务器备份目录"]
      SaveLocal --> E(["结束"])
      SaveOSS --> E
      

图表来源

  • server/src/config/index.ts:113-117
  • server/src/services/storage.service.ts:198-213
  • server/src/services/oss.service.ts:138-158
  • deploy-prod.sh:88-95

章节来源

  • server/src/config/index.ts:113-117
  • server/src/services/storage.service.ts:198-213
  • server/src/services/oss.service.ts:138-158
  • deploy-prod.sh:88-95

配置文件备份与恢复

  • 配置来源
    • 应用配置:config模块读取环境变量与模型配置
    • 生产配置:部署脚本将生产配置复制为运行时配置
  • 备份策略
    • 全量备份:备份生产配置文件与运行时配置
    • 存储位置:服务器本地备份目录
  • 恢复流程

    • 将备份的配置文件恢复至原路径
    • 部署脚本会再次复制生产配置到运行时配置文件

      sequenceDiagram
      participant Ops as "运维"
      participant Server as "服务器"
      Ops->>Server : "备份生产配置"
      Ops->>Server : "备份运行时配置(.env)"
      Ops->>Server : "恢复配置文件"
      Server->>Server : "部署脚本复制生产配置到运行时"
      

图表来源

  • deploy-prod.sh:117-118

章节来源

  • deploy-prod.sh:117-118

备份自动化与恢复测试

  • 自动化脚本
    • 生产部署脚本:包含服务器侧备份、解压、替换、安装依赖、生成Prisma客户端、启动服务等步骤
    • 自动部署脚本:用于触发部署流程
    • 简化部署脚本:快速启动前后端服务
  • 恢复测试

    • 部署完成后检查关键目录是否存在
    • 健康检查接口验证服务可用性

      sequenceDiagram
      participant Ops as "运维"
      participant Prod as "生产部署脚本"
      participant Auto as "自动部署脚本"
      participant Sim as "简化部署脚本"
      Ops->>Prod : "执行生产部署"
      Ops->>Auto : "触发自动部署"
      Ops->>Sim : "执行简化部署"
      Prod-->>Ops : "部署完成并健康检查"
      Auto-->>Ops : "部署完成"
      Sim-->>Ops : "服务启动完成"
      

图表来源

  • deploy-prod.sh:139-164
  • server/deploy-auto.sh:47-53
  • server/deploy-simple.sh:55-61

章节来源

  • deploy-prod.sh:139-164
  • server/deploy-auto.sh:47-53
  • server/deploy-simple.sh:55-61

依赖关系分析

  • 存储服务依赖OSS服务或本地文件系统
  • 应用通过配置模块读取数据库连接信息
  • 部署脚本依赖服务器侧备份与PM2进程管理

    graph LR
    CFG["配置模块<br/>config/index.ts"] --> DB["数据库连接"]
    STORE["存储服务<br/>storage.service.ts"] --> OSS["OSS服务<br/>oss.service.ts"]
    STORE --> FS["本地文件系统"]
    DPROD["生产部署脚本"] --> DB
    DPROD --> FS
    DPROD --> APP["后端应用"]
    

图表来源

  • server/src/config/index.ts:73-75
  • server/src/services/storage.service.ts:14-20
  • server/src/services/oss.service.ts:18-30
  • deploy-prod.sh:88-127

章节来源

  • server/src/config/index.ts:73-75
  • server/src/services/storage.service.ts:14-20
  • server/src/services/oss.service.ts:18-30
  • deploy-prod.sh:88-127

性能考量

  • 备份窗口:尽量避开业务高峰期,采用分时段全量+增量组合
  • 并行策略:数据库与文件系统可并行备份,提升整体效率
  • 压缩与去重:对备份数据进行压缩与重复数据删除,降低存储开销
  • 传输安全:使用加密通道(如SFTP/HTTPS)进行跨网络传输
  • 恢复验证:定期进行恢复演练,验证RTO/RPO指标达标

故障排查指南

  • 数据库备份失败
    • 检查数据库连接字符串与权限
    • 确认迁移锁文件状态
    • 查看部署日志定位具体阶段
  • 文件存储备份失败
    • 检查本地磁盘空间与权限
    • 若使用OSS,检查凭证与桶权限
  • 部署后服务不可用
    • 检查PM2进程状态与日志
    • 验证健康检查接口返回
  • 配置加载异常
    • 确认生产配置已复制到运行时配置文件

章节来源

  • deploy-prod.sh:88-127
  • server/src/services/storage.service.ts:252-272
  • server/src/services/oss.service.ts:241-250

结论

本方案通过“部署前备份”与“双后端存储”相结合的方式,确保数据库与文件数据在生产环境中的高可靠与可恢复性。配合自动化脚本与恢复测试,可有效达成RTO/RPO目标,并保障业务连续性。

附录

  • 备份策略建议
    • 全量备份:每周日凌晨执行
    • 增量备份:每小时执行一次
    • 存储位置:服务器本地备份目录,保留最近7天
  • 安全与合规
    • 传输加密:使用受信网络与加密通道
    • 访问控制:限制备份目录与OSS桶访问权限
    • 审计日志:记录备份与恢复操作日志
  • 监控与告警
    • 监控项:备份成功率、备份耗时、恢复演练通过率
    • 告警阈值:连续失败次数超过阈值立即告警
    • 演练频率:每季度进行一次恢复演练