# 数据库部署
**本文引用的文件**
- [schema.prisma](file://server/prisma/schema.prisma)
- [migration_lock.toml](file://server/prisma/migrations/migration_lock.toml)
- [20260422105352_add_content_status/migration.sql](file://server/prisma/migrations/20260422105352_add_content_status/migration.sql)
- [migrate_publish.sql](file://server/prisma/migrate_publish.sql)
- [.env.example](file://server/.env.example)
- [index.ts](file://server/src/models/index.ts)
- [migrate-genstage.ts](file://server/prisma/migrate-genstage.ts)
- [sync-genstage.ts](file://server/prisma/sync-genstage.ts)
- [DEPLOY.md](file://docs/DEPLOY.md)
- [audio_book.sql](file://audio_book.sql)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向AI有声书生成平台的数据库部署与运维,聚焦于MySQL数据库的安装配置、初始化、Prisma ORM迁移机制、备份恢复策略、监控优化与安全配置。文档基于仓库中的Prisma配置、迁移脚本与示例环境变量,提供可操作的部署指导。
## 项目结构
- 数据库ORM与模型定义位于 server/prisma/schema.prisma,声明了MySQL数据源与完整的业务模型关系。
- 迁移文件位于 server/prisma/migrations,包含Prisma自动生成的SQL迁移与补充的发布模块迁移脚本。
- 数据库连接与Prisma客户端初始化位于 server/src/models/index.ts。
- 示例环境变量 server/.env.example 提供DATABASE_URL等关键配置项。
- 文档 docs/DEPLOY.md 包含部署与运维相关内容(MongoDB为主,可参考其运维思路)。
```mermaid
graph TB
subgraph "后端服务"
APP["应用服务"]
PRISMA["Prisma 客户端"]
MODELS["模型定义
schema.prisma"]
MIGRATIONS["迁移文件
migrations/*"]
ENV[".env.example
DATABASE_URL"]
end
subgraph "数据库"
MYSQL["MySQL 服务器"]
SCHEMA["数据库结构
schema.prisma"]
end
APP --> PRISMA
PRISMA --> MODELS
PRISMA --> MIGRATIONS
PRISMA --> MYSQL
MODELS --> SCHEMA
ENV --> MYSQL
```
**图表来源**
- [schema.prisma](file://server/prisma/schema.prisma)
- [index.ts](file://server/src/models/index.ts)
- [.env.example](file://server/.env.example)
**章节来源**
- [schema.prisma](file://server/prisma/schema.prisma)
- [index.ts](file://server/src/models/index.ts)
- [.env.example](file://server/.env.example)
## 核心组件
- 数据源与连接
- 数据源配置指向MySQL,通过环境变量 DATABASE_URL 提供连接字符串。
- Prisma客户端在应用启动时建立连接并提供类型化查询能力。
- 模型与索引
- 用户、订单、播放记录、收藏、评论、订阅、书稿、章节、视频项目、音频记录、发布任务等核心实体。
- 多处复合索引与唯一约束,覆盖高频查询维度(如用户+时间、订单号、章节唯一组合等)。
- 迁移与版本控制
- Prisma迁移文件包含表结构、索引与外键定义。
- 提供补充的发布模块迁移脚本,确保视频发布相关表结构就绪。
- 迁移锁定文件保证并发一致性。
**章节来源**
- [schema.prisma](file://server/prisma/schema.prisma)
- [migration_lock.toml](file://server/prisma/migrations/migration_lock.toml)
- [20260422105352_add_content_status/migration.sql](file://server/prisma/migrations/20260422105352_add_content_status/migration.sql)
- [migrate_publish.sql](file://server/prisma/migrate_publish.sql)
## 架构概览
下图展示了应用、ORM与数据库之间的交互关系,以及迁移与初始化的关键节点。
```mermaid
sequenceDiagram
participant Dev as "开发者"
participant App as "应用服务"
participant Prisma as "Prisma 客户端"
participant DB as "MySQL 数据库"
Dev->>App : 配置 DATABASE_URL
App->>Prisma : 初始化客户端
Prisma->>DB : 建立连接
Dev->>Prisma : 执行迁移
Prisma->>DB : 应用迁移SQL
App->>Prisma : 查询/写入数据
Prisma->>DB : 执行SQL
DB-->>Prisma : 返回结果
Prisma-->>App : 返回结果
```
**图表来源**
- [index.ts](file://server/src/models/index.ts)
- [schema.prisma](file://server/prisma/schema.prisma)
- [20260422105352_add_content_status/migration.sql](file://server/prisma/migrations/20260422105352_add_content_status/migration.sql)
## 详细组件分析
### MySQL安装与初始化
- 安装与配置
- 在目标主机安装MySQL 8.0+,创建数据库与用户,授予必要权限。
- 使用 .env.example 中的 DATABASE_URL 格式配置连接串(用户名、密码、主机、端口、数据库名)。
- 字符集与排序规则
- Prisma迁移脚本与补充SQL均使用 utf8mb4 与 utf8mb4_unicode_ci,确保表情符号与多语言支持。
- 存储引擎
- 迁移脚本指定 InnoDB 引擎,具备事务、外键与崩溃恢复能力,适合高并发写入场景。
- 性能参数调优(建议)
- innodb_buffer_pool_size:建议占物理内存的 50%-70%
- innodb_log_file_size:建议 256M-512M
- innodb_flush_log_at_trx_commit:生产环境设为 1 或 2 平衡安全与性能
- max_connections:根据应用实例数量与峰值并发合理设置
- query_cache_size:MySQL 8.0 默认禁用,建议使用二级缓存(如Redis)替代
- thread_cache_size:根据并发连接数调整
- tmp_table_size 与 max_heap_table_size:避免磁盘临时表
- open_files_limit:确保足够打开文件句柄
- 注意:以上为通用建议,需结合实际硬件与负载压测确定最优值。
**章节来源**
- [.env.example](file://server/.env.example)
- [20260422105352_add_content_status/migration.sql](file://server/prisma/migrations/20260422105352_add_content_status/migration.sql)
- [migrate_publish.sql](file://server/prisma/migrate_publish.sql)
### Prisma ORM迁移机制
- 迁移生成与执行
- 通过 Prisma CLI 生成迁移文件,包含表结构、索引与外键定义。
- 迁移锁定文件 migration_lock.toml 保障并发迁移安全。
- 回滚策略
- Prisma支持向后迁移(down),可在测试环境快速回退到上一版本。
- 生产环境建议谨慎使用,优先采用“向前修复”迁移(新增修正SQL)。
- 补充迁移
- migrate_publish.sql 为视频发布模块的补充迁移,需在应用Prisma迁移后手动执行。
- 状态迁移脚本
- migrate-genstage.ts:将旧字段映射到新的 genStage 字段。
- sync-genstage.ts:基于安全函数同步genStage,处理并发与回退场景。
```mermaid
flowchart TD
Start(["开始"]) --> CheckLock["检查迁移锁定文件"]
CheckLock --> |通过| ApplyPrisma["应用 Prisma 迁移"]
CheckLock --> |冲突| WaitRetry["等待或重试"]
ApplyPrisma --> ApplyExtra["执行补充迁移 SQL"]
ApplyExtra --> GenStage["执行 genStage 迁移脚本"]
GenStage --> Done(["完成"])
WaitRetry --> CheckLock
```
**图表来源**
- [migration_lock.toml](file://server/prisma/migrations/migration_lock.toml)
- [20260422105352_add_content_status/migration.sql](file://server/prisma/migrations/20260422105352_add_content_status/migration.sql)
- [migrate_publish.sql](file://server/prisma/migrate_publish.sql)
- [migrate-genstage.ts](file://server/prisma/migrate-genstage.ts)
- [sync-genstage.ts](file://server/prisma/sync-genstage.ts)
**章节来源**
- [migration_lock.toml](file://server/prisma/migrations/migration_lock.toml)
- [20260422105352_add_content_status/migration.sql](file://server/prisma/migrations/20260422105352_add_content_status/migration.sql)
- [migrate_publish.sql](file://server/prisma/migrate_publish.sql)
- [migrate-genstage.ts](file://server/prisma/migrate-genstage.ts)
- [sync-genstage.ts](file://server/prisma/sync-genstage.ts)
### 数据库备份与恢复
- 备份策略
- 全量备份:使用逻辑导出(如mysqldump)定期生成全库快照。
- 增量备份:结合binlog或Percona XtraBackup实现增量备份与时间点恢复。
- 对象级备份:针对大字段(如LongText)可单独导出或使用压缩归档。
- 恢复流程
- 恢复顺序:先恢复结构(迁移),再恢复数据;若涉及genStage字段,最后执行状态迁移脚本。
- 验证:恢复后执行基础查询与索引校验,确认业务关键查询可用。
- 灾难恢复
- 制定RTO/RPO目标,定期演练恢复流程。
- 将备份存储在异地或云端,确保不可篡改与可审计。
**章节来源**
- [migrate-genstage.ts](file://server/prisma/migrate-genstage.ts)
- [sync-genstage.ts](file://server/prisma/sync-genstage.ts)
### 监控与性能优化
- 慢查询分析
- 启用慢查询日志,定位执行时间长、扫描行数多的SQL。
- 结合EXPLAIN分析执行计划,优化索引与查询条件。
- 索引优化
- 针对高频过滤与连接字段建立复合索引(如用户+时间、订单号、章节唯一组合)。
- 定期评估冗余索引,删除未使用或重复索引。
- 连接池配置
- 在应用侧使用连接池(如Prisma默认连接池),合理设置最大连接数与超时时间。
- 监控连接池命中率与等待时间,避免连接泄漏。
- 读写分离与分片
- 高并发场景可考虑读写分离与按用户ID分片,降低单库压力。
**章节来源**
- [schema.prisma](file://server/prisma/schema.prisma)
### 安全配置
- 用户权限管理
- 为应用创建专用数据库用户,仅授予必要权限(SELECT、INSERT、UPDATE、DELETE、CREATE、INDEX等)。
- 为备份任务创建只读用户,避免写入风险。
- 网络访问控制
- 限制MySQL监听地址与访问白名单,仅允许应用服务器访问。
- 使用跳板机或VPN访问数据库管理端口。
- 数据加密
- 启用SSL/TLS加密连接,防止中间人攻击。
- 敏感字段(如支付订单)在应用层做额外加密存储。
- 审计与合规
- 启用审计日志,记录DDL与关键DML操作。
- 定期审查权限与访问日志,满足合规要求。
**章节来源**
- [.env.example](file://server/.env.example)
## 依赖关系分析
- 组件耦合
- 应用通过 Prisma 客户端访问数据库,模型变更直接影响迁移与查询性能。
- 迁移脚本与补充SQL共同构成最终数据库结构,需严格版本控制。
- 外部依赖
- MySQL版本需与Prisma驱动兼容(建议8.0+)。
- 环境变量 DATABASE_URL 必须正确配置,否则连接失败。
```mermaid
graph LR
ENV[".env.example"] --> DBURL["DATABASE_URL"]
DBURL --> MYSQL["MySQL"]
SCHEMA["schema.prisma"] --> MIG["迁移文件"]
MIG --> MYSQL
APP["应用服务"] --> PRISMA["Prisma 客户端"]
PRISMA --> MYSQL
```
**图表来源**
- [.env.example](file://server/.env.example)
- [schema.prisma](file://server/prisma/schema.prisma)
- [index.ts](file://server/src/models/index.ts)
**章节来源**
- [schema.prisma](file://server/prisma/schema.prisma)
- [index.ts](file://server/src/models/index.ts)
- [.env.example](file://server/.env.example)
## 性能考虑
- 查询性能
- 为高频查询字段建立合适索引,避免全表扫描。
- 使用LIMIT与分页,避免一次性返回过多数据。
- 写入性能
- 批量插入与事务提交,减少往返开销。
- 控制并发写入,避免热点更新导致锁竞争。
- 缓存策略
- 对热点读取(如用户偏好、热门搜索)引入Redis缓存,降低数据库压力。
- 监控指标
- 关注慢查询、连接数、缓冲池命中率、锁等待与表扫描等关键指标。
[本节为通用指导,无需特定文件引用]
## 故障排查指南
- 连接失败
- 检查 DATABASE_URL 格式与可达性,确认MySQL服务状态与防火墙策略。
- 参考应用侧连接日志,定位认证与权限问题。
- 迁移异常
- 检查 migration_lock.toml 是否被意外修改,必要时清理锁定后重试。
- 若补充迁移失败,确认数据库用户具备DDL权限。
- 数据不一致
- 执行 genStage 状态迁移脚本,确保章节与书稿状态一致。
- 使用 sync-genstage.ts 进行安全同步,避免并发冲突导致的状态错乱。
**章节来源**
- [migration_lock.toml](file://server/prisma/migrations/migration_lock.toml)
- [migrate-genstage.ts](file://server/prisma/migrate-genstage.ts)
- [sync-genstage.ts](file://server/prisma/sync-genstage.ts)
## 结论
本部署文档基于仓库中的Prisma配置与迁移脚本,给出了MySQL安装、初始化、迁移、备份恢复、监控优化与安全配置的完整实践路径。建议在生产环境中结合压测与监控持续优化参数,并严格执行备份与演练流程,确保系统稳定与数据安全。
[本节为总结性内容,无需特定文件引用]
## 附录
- 参考文档
- docs/DEPLOY.md 提供了部署与运维的通用流程(MongoDB为主),可借鉴其运维思路与最佳实践。
**章节来源**
- [DEPLOY.md](file://docs/DEPLOY.md)