# 备份恢复 **本文引用的文件** - [server/src/config/index.ts](file://server/src/config/index.ts) - [server/prisma/schema.prisma](file://server/prisma/schema.prisma) - [server/src/services/storage.service.ts](file://server/src/services/storage.service.ts) - [server/src/services/oss.service.ts](file://server/src/services/oss.service.ts) - [server/deploy-auto.sh](file://server/deploy-auto.sh) - [server/deploy-simple.sh](file://server/deploy-simple.sh) - [deploy-prod.sh](file://deploy-prod.sh) - [server/prisma/migrations/migration_lock.toml](file://server/prisma/migrations/migration_lock.toml) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向AI有声书生成平台,提供一套完整的备份与恢复方案,覆盖数据库(MySQL)、文件存储(本地/阿里云OSS)以及配置文件等关键资产。内容包括: - 备份策略:全量与增量备份的时机、频率与存储位置 - 数据验证:备份完整性校验与一致性检查 - 安全与合规:传输加密与安全存储 - 灾难恢复:恢复流程、RTO/RPO目标与业务连续性保障 - 自动化:备份与恢复脚本、恢复测试与演练 - 监控与告警:备份状态监控、异常处理与告警联动 ## 项目结构 围绕备份与恢复的关键目录与文件如下: - 数据库:Prisma Schema定义与迁移锁文件 - 应用配置:运行时配置与上传目录 - 文件存储:统一存储服务(本地/阿里云OSS) - 部署与备份:生产部署脚本中包含服务器侧备份逻辑 ```mermaid graph TB subgraph "应用层" APP["后端应用
server/src/app.ts"] CFG["配置模块
server/src/config/index.ts"] STORE["存储服务
server/src/services/storage.service.ts"] OSS["OSS服务
server/src/services/oss.service.ts"] end subgraph "数据层" PRISMA["Prisma Schema
server/prisma/schema.prisma"] MYSQL["MySQL 数据库"] MIGLOCK["迁移锁
server/prisma/migrations/migration_lock.toml"] end subgraph "文件存储" LOCAL["本地上传目录
process.cwd()/uploads"] ALI["阿里云OSS Bucket"] end subgraph "部署与备份" DPROD["生产部署脚本
deploy-prod.sh"] DAUTO["自动部署脚本
server/deploy-auto.sh"] DSIM["简化部署脚本
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](file://server/src/config/index.ts#L113-L117) - [server/prisma/schema.prisma:1-10](file://server/prisma/schema.prisma#L1-L10) - [server/src/services/storage.service.ts:198-213](file://server/src/services/storage.service.ts#L198-L213) - [server/src/services/oss.service.ts:18-30](file://server/src/services/oss.service.ts#L18-L30) - [deploy-prod.sh:88-95](file://deploy-prod.sh#L88-L95) - [server/deploy-auto.sh:47-53](file://server/deploy-auto.sh#L47-L53) 章节来源 - [server/src/config/index.ts:113-117](file://server/src/config/index.ts#L113-L117) - [server/prisma/schema.prisma:1-10](file://server/prisma/schema.prisma#L1-L10) - [server/src/services/storage.service.ts:198-213](file://server/src/services/storage.service.ts#L198-L213) - [server/src/services/oss.service.ts:18-30](file://server/src/services/oss.service.ts#L18-L30) - [deploy-prod.sh:88-95](file://deploy-prod.sh#L88-L95) - [server/deploy-auto.sh:47-53](file://server/deploy-auto.sh#L47-L53) ## 核心组件 - 数据库(MySQL):通过Prisma Schema定义表结构,使用环境变量DATABASE_URL连接;迁移锁文件确保迁移过程一致性。 - 文件存储(本地/OSS):统一存储服务支持两种后端,自动切换;本地存储默认上传目录位于应用根目录的uploads子目录。 - 配置与部署:应用配置集中于config模块;生产部署脚本在服务器侧执行备份与部署。 章节来源 - [server/prisma/schema.prisma:1-10](file://server/prisma/schema.prisma#L1-L10) - [server/src/config/index.ts:113-117](file://server/src/config/index.ts#L113-L117) - [server/src/services/storage.service.ts:198-213](file://server/src/services/storage.service.ts#L198-L213) - [server/src/services/oss.service.ts:18-30](file://server/src/services/oss.service.ts#L18-L30) ## 架构总览 备份与恢复涉及以下关键路径: - 数据库备份:在部署前对数据库进行备份(生产脚本包含服务器侧备份步骤) - 文件存储备份:在部署前对上传目录进行备份(生产脚本包含服务器侧备份步骤) - 配置文件备份:生产脚本会复制生产环境配置到运行时环境文件 - 恢复验证:部署完成后进行关键文件存在性检查与服务健康检查 ```mermaid 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](file://deploy-prod.sh#L88-L127) - [deploy-prod.sh:140-164](file://deploy-prod.sh#L140-L164) 章节来源 - [deploy-prod.sh:88-127](file://deploy-prod.sh#L88-L127) - [deploy-prod.sh:140-164](file://deploy-prod.sh#L140-L164) ## 详细组件分析 ### 数据库备份与恢复 - 连接与结构 - 数据库类型:MySQL - 连接字符串来源:环境变量DATABASE_URL - 表结构定义:Prisma Schema - 迁移一致性:迁移锁文件 - 备份策略 - 全量备份:在每次生产部署前执行一次数据库全量备份 - 增量备份:建议结合数据库二进制日志(binlog)进行增量备份(需数据库侧配置) - 存储位置:服务器本地备份目录(部署脚本创建) - 恢复流程 - 从最近一次全量备份与对应增量备份恢复 - 恢复后执行Prisma迁移以确保Schema一致性 - RTO/RPO - RPO取决于增量备份频率;建议按小时级别 - RTO取决于备份介质与恢复脚本执行效率 ```mermaid flowchart TD Start(["开始备份"]) --> CheckLock["检查迁移锁文件"] CheckLock --> LockOK{"迁移锁正常?"} LockOK --> |否| Abort["中止并告警"] LockOK --> |是| DumpDB["执行数据库全量备份"] DumpDB --> BackupUploads["备份上传目录"] BackupUploads --> Store["写入服务器备份目录"] Store --> Done(["完成"]) Abort --> Done ``` 图表来源 - [deploy-prod.sh:88-95](file://deploy-prod.sh#L88-L95) - [server/prisma/migrations/migration_lock.toml:1-3](file://server/prisma/migrations/migration_lock.toml#L1-L3) 章节来源 - [server/prisma/schema.prisma:1-10](file://server/prisma/schema.prisma#L1-L10) - [deploy-prod.sh:88-95](file://deploy-prod.sh#L88-L95) - [server/prisma/migrations/migration_lock.toml:1-3](file://server/prisma/migrations/migration_lock.toml#L1-L3) ### 文件存储备份与恢复 - 存储后端 - 本地存储:默认上传目录为应用根目录下的uploads - 阿里云OSS:通过OSS服务封装,支持上传、删除、签名URL等 - 备份策略 - 全量备份:在部署前对uploads目录进行拷贝备份 - 增量备份:可基于rsync或OSS对象版本控制进行增量同步 - 存储位置:服务器本地备份目录 - 恢复流程 - 将备份目录恢复至原路径 - 若使用OSS,需确保桶内对象完整且可访问 - RTO/RPO - RPO取决于增量同步频率;建议按小时级别 - RTO取决于对象数量与网络带宽 ```mermaid 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](file://server/src/config/index.ts#L113-L117) - [server/src/services/storage.service.ts:198-213](file://server/src/services/storage.service.ts#L198-L213) - [server/src/services/oss.service.ts:138-158](file://server/src/services/oss.service.ts#L138-L158) - [deploy-prod.sh:88-95](file://deploy-prod.sh#L88-L95) 章节来源 - [server/src/config/index.ts:113-117](file://server/src/config/index.ts#L113-L117) - [server/src/services/storage.service.ts:198-213](file://server/src/services/storage.service.ts#L198-L213) - [server/src/services/oss.service.ts:138-158](file://server/src/services/oss.service.ts#L138-L158) - [deploy-prod.sh:88-95](file://deploy-prod.sh#L88-L95) ### 配置文件备份与恢复 - 配置来源 - 应用配置:config模块读取环境变量与模型配置 - 生产配置:部署脚本将生产配置复制为运行时配置 - 备份策略 - 全量备份:备份生产配置文件与运行时配置 - 存储位置:服务器本地备份目录 - 恢复流程 - 将备份的配置文件恢复至原路径 - 部署脚本会再次复制生产配置到运行时配置文件 ```mermaid sequenceDiagram participant Ops as "运维" participant Server as "服务器" Ops->>Server : "备份生产配置" Ops->>Server : "备份运行时配置(.env)" Ops->>Server : "恢复配置文件" Server->>Server : "部署脚本复制生产配置到运行时" ``` 图表来源 - [deploy-prod.sh:117-118](file://deploy-prod.sh#L117-L118) 章节来源 - [deploy-prod.sh:117-118](file://deploy-prod.sh#L117-L118) ### 备份自动化与恢复测试 - 自动化脚本 - 生产部署脚本:包含服务器侧备份、解压、替换、安装依赖、生成Prisma客户端、启动服务等步骤 - 自动部署脚本:用于触发部署流程 - 简化部署脚本:快速启动前后端服务 - 恢复测试 - 部署完成后检查关键目录是否存在 - 健康检查接口验证服务可用性 ```mermaid 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](file://deploy-prod.sh#L139-L164) - [server/deploy-auto.sh:47-53](file://server/deploy-auto.sh#L47-L53) - [server/deploy-simple.sh:55-61](file://server/deploy-simple.sh#L55-L61) 章节来源 - [deploy-prod.sh:139-164](file://deploy-prod.sh#L139-L164) - [server/deploy-auto.sh:47-53](file://server/deploy-auto.sh#L47-L53) - [server/deploy-simple.sh:55-61](file://server/deploy-simple.sh#L55-L61) ## 依赖关系分析 - 存储服务依赖OSS服务或本地文件系统 - 应用通过配置模块读取数据库连接信息 - 部署脚本依赖服务器侧备份与PM2进程管理 ```mermaid graph LR CFG["配置模块
config/index.ts"] --> DB["数据库连接"] STORE["存储服务
storage.service.ts"] --> OSS["OSS服务
oss.service.ts"] STORE --> FS["本地文件系统"] DPROD["生产部署脚本"] --> DB DPROD --> FS DPROD --> APP["后端应用"] ``` 图表来源 - [server/src/config/index.ts:73-75](file://server/src/config/index.ts#L73-L75) - [server/src/services/storage.service.ts:14-20](file://server/src/services/storage.service.ts#L14-L20) - [server/src/services/oss.service.ts:18-30](file://server/src/services/oss.service.ts#L18-L30) - [deploy-prod.sh:88-127](file://deploy-prod.sh#L88-L127) 章节来源 - [server/src/config/index.ts:73-75](file://server/src/config/index.ts#L73-L75) - [server/src/services/storage.service.ts:14-20](file://server/src/services/storage.service.ts#L14-L20) - [server/src/services/oss.service.ts:18-30](file://server/src/services/oss.service.ts#L18-L30) - [deploy-prod.sh:88-127](file://deploy-prod.sh#L88-L127) ## 性能考量 - 备份窗口:尽量避开业务高峰期,采用分时段全量+增量组合 - 并行策略:数据库与文件系统可并行备份,提升整体效率 - 压缩与去重:对备份数据进行压缩与重复数据删除,降低存储开销 - 传输安全:使用加密通道(如SFTP/HTTPS)进行跨网络传输 - 恢复验证:定期进行恢复演练,验证RTO/RPO指标达标 ## 故障排查指南 - 数据库备份失败 - 检查数据库连接字符串与权限 - 确认迁移锁文件状态 - 查看部署日志定位具体阶段 - 文件存储备份失败 - 检查本地磁盘空间与权限 - 若使用OSS,检查凭证与桶权限 - 部署后服务不可用 - 检查PM2进程状态与日志 - 验证健康检查接口返回 - 配置加载异常 - 确认生产配置已复制到运行时配置文件 章节来源 - [deploy-prod.sh:88-127](file://deploy-prod.sh#L88-L127) - [server/src/services/storage.service.ts:252-272](file://server/src/services/storage.service.ts#L252-L272) - [server/src/services/oss.service.ts:241-250](file://server/src/services/oss.service.ts#L241-L250) ## 结论 本方案通过“部署前备份”与“双后端存储”相结合的方式,确保数据库与文件数据在生产环境中的高可靠与可恢复性。配合自动化脚本与恢复测试,可有效达成RTO/RPO目标,并保障业务连续性。 ## 附录 - 备份策略建议 - 全量备份:每周日凌晨执行 - 增量备份:每小时执行一次 - 存储位置:服务器本地备份目录,保留最近7天 - 安全与合规 - 传输加密:使用受信网络与加密通道 - 访问控制:限制备份目录与OSS桶访问权限 - 审计日志:记录备份与恢复操作日志 - 监控与告警 - 监控项:备份成功率、备份耗时、恢复演练通过率 - 告警阈值:连续失败次数超过阈值立即告警 - 演练频率:每季度进行一次恢复演练