184 lines
3.5 KiB
Markdown
184 lines
3.5 KiB
Markdown
# 数据库配置指南
|
||
|
||
## 1. 创建数据库
|
||
|
||
首先需要在 MySQL 中创建数据库:
|
||
|
||
```sql
|
||
CREATE DATABASE db_competition_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
```
|
||
|
||
## 2. 配置环境变量
|
||
|
||
### 方式一:复制示例文件
|
||
|
||
```bash
|
||
cd backend
|
||
cp .env.example .env
|
||
```
|
||
|
||
### 方式二:手动创建 .env 文件
|
||
|
||
在 `backend` 目录下创建 `.env` 文件,内容如下:
|
||
|
||
```env
|
||
DATABASE_URL="mysql://root:password@localhost:3306/competition_management?schema=public"
|
||
JWT_SECRET="your-secret-key-change-in-production"
|
||
PORT=3001
|
||
NODE_ENV=development
|
||
```
|
||
|
||
## 3. 配置说明
|
||
|
||
### DATABASE_URL 格式
|
||
|
||
```
|
||
mysql://用户名:密码@主机:端口/数据库名?参数
|
||
```
|
||
|
||
**示例:**
|
||
|
||
- 本地 MySQL,默认端口:
|
||
|
||
```
|
||
DATABASE_URL="mysql://root:password@localhost:3306/competition_management?schema=public"
|
||
```
|
||
|
||
- 远程 MySQL:
|
||
|
||
```
|
||
DATABASE_URL="mysql://user:password@192.168.1.100:3306/competition_management?schema=public"
|
||
```
|
||
|
||
- 使用 SSL:
|
||
|
||
```
|
||
DATABASE_URL="mysql://user:password@localhost:3306/competition_management?schema=public&sslmode=require"
|
||
```
|
||
|
||
- 包含特殊字符的密码(需要 URL 编码):
|
||
```
|
||
DATABASE_URL="mysql://user:p%40ssw0rd@localhost:3306/competition_management?schema=public"
|
||
```
|
||
|
||
### JWT_SECRET
|
||
|
||
用于 JWT token 签名的密钥,生产环境必须使用强随机字符串。
|
||
|
||
**生成方式:**
|
||
|
||
```bash
|
||
# 使用 Node.js
|
||
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
||
|
||
# 或使用 openssl
|
||
openssl rand -hex 32
|
||
```
|
||
|
||
## 4. 初始化数据库
|
||
|
||
配置好 `.env` 文件后,执行以下命令初始化数据库:
|
||
|
||
```bash
|
||
# 生成 Prisma Client
|
||
pnpm prisma:generate
|
||
|
||
# 运行数据库迁移(创建表结构)
|
||
pnpm prisma:migrate
|
||
|
||
# 或使用开发模式(会提示输入迁移名称)
|
||
pnpm prisma:migrate dev
|
||
```
|
||
|
||
## 5. 验证连接
|
||
|
||
### 方式一:使用 Prisma Studio
|
||
|
||
```bash
|
||
pnpm prisma:studio
|
||
```
|
||
|
||
这会打开一个可视化界面,可以在浏览器中查看和管理数据库。
|
||
|
||
### 方式二:测试连接
|
||
|
||
启动后端服务:
|
||
|
||
```bash
|
||
pnpm start:dev
|
||
```
|
||
|
||
如果连接成功,服务会正常启动;如果失败,会显示具体的错误信息。
|
||
|
||
## 6. 常见问题
|
||
|
||
### 问题 1: 连接被拒绝
|
||
|
||
**错误信息:** `Can't reach database server`
|
||
|
||
**解决方案:**
|
||
|
||
- 检查 MySQL 服务是否启动
|
||
- 检查主机和端口是否正确
|
||
- 检查防火墙设置
|
||
|
||
### 问题 2: 认证失败
|
||
|
||
**错误信息:** `Access denied for user`
|
||
|
||
**解决方案:**
|
||
|
||
- 检查用户名和密码是否正确
|
||
- 确认用户有访问该数据库的权限
|
||
- 如果密码包含特殊字符,需要进行 URL 编码
|
||
|
||
### 问题 3: 数据库不存在
|
||
|
||
**错误信息:** `Unknown database`
|
||
|
||
**解决方案:**
|
||
|
||
- 先创建数据库(见步骤 1)
|
||
- 检查数据库名称是否正确
|
||
|
||
### 问题 4: 字符集问题
|
||
|
||
**解决方案:**
|
||
创建数据库时指定字符集:
|
||
|
||
```sql
|
||
CREATE DATABASE competition_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
```
|
||
|
||
## 7. 生产环境配置
|
||
|
||
生产环境建议:
|
||
|
||
1. **使用环境变量管理工具**(如 AWS Secrets Manager、Azure Key Vault)
|
||
2. **使用连接池**(Prisma 默认已配置)
|
||
3. **启用 SSL 连接**
|
||
4. **定期备份数据库**
|
||
5. **使用强密码和 JWT_SECRET**
|
||
|
||
## 8. 数据库迁移
|
||
|
||
### 创建新迁移
|
||
|
||
```bash
|
||
pnpm prisma:migrate dev --name migration_name
|
||
```
|
||
|
||
### 应用迁移(生产环境)
|
||
|
||
```bash
|
||
pnpm prisma:migrate deploy
|
||
```
|
||
|
||
### 重置数据库(开发环境)
|
||
|
||
```bash
|
||
pnpm prisma:migrate reset
|
||
```
|
||
|
||
**注意:** 这会删除所有数据,仅用于开发环境!
|