# 数据库配置指南 ## 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 ``` **注意:** 这会删除所有数据,仅用于开发环境!