Files
schoolNews/schoolNewsServ/.bin/mysql/使用说明.md

394 lines
8.3 KiB
Markdown
Raw Normal View History

2025-10-15 10:39:51 +08:00
# 数据库初始化使用说明
## 目录结构
```
.bin/mysql/
├── init-database.bat # Windows批处理脚本
├── init-database.sh # Linux/Mac Shell脚本
├── 使用说明.md # 本文件
└── sql/
├── createDB.sql # 创建数据库
├── createTableUser.sql # 用户相关表
├── createTablePermission.sql # 权限相关表
├── createTableResource.sql # 资源管理相关表
├── createTableCourse.sql # 课程管理相关表
├── createTableLearning.sql # 学习管理相关表
├── createTableUserCenter.sql # 个人中心相关表
├── createTableAI.sql # 智能体相关表
├── createTableSystem.sql # 系统配置和日志相关表
├── initAll.sql # 一键执行所有SQL
├── README.md # 表结构详细说明
├── 表结构汇总.md # 表结构汇总
└── ER关系图.md # ER关系图
```
## 快速开始
### 方法一:使用自动化脚本(推荐)
#### Windows环境
1. 确保已安装MySQL并且MySQL命令行工具在系统PATH中
2. 双击运行 `init-database.bat`
3. 按提示输入MySQL连接信息
4. 等待初始化完成
#### Linux/Mac环境
1. 确保已安装MySQL客户端
2. 给脚本添加执行权限:
```bash
chmod +x init-database.sh
```
3. 运行脚本:
```bash
./init-database.sh
```
4. 按提示输入MySQL连接信息
5. 等待初始化完成
### 方法二使用MySQL命令行
#### 连接到MySQL
```bash
mysql -u root -p
```
#### 执行初始化脚本
```sql
SOURCE /path/to/.bin/mysql/sql/initAll.sql;
```
或者在命令行中执行:
```bash
cd .bin/mysql/sql
mysql -u root -p < createDB.sql
mysql -u root -p < createTableUser.sql
mysql -u root -p < createTablePermission.sql
mysql -u root -p < createTableResource.sql
mysql -u root -p < createTableCourse.sql
mysql -u root -p < createTableLearning.sql
mysql -u root -p < createTableUserCenter.sql
mysql -u root -p < createTableAI.sql
mysql -u root -p < createTableSystem.sql
```
### 方法三:使用数据库管理工具
使用 Navicat、DBeaver、phpMyAdmin 等数据库管理工具:
1. 连接到MySQL服务器
2. 依次执行以下SQL文件
- createDB.sql
- createTableUser.sql
- createTablePermission.sql
- createTableResource.sql
- createTableCourse.sql
- createTableLearning.sql
- createTableUserCenter.sql
- createTableAI.sql
- createTableSystem.sql
## 初始化后的验证
### 检查数据库是否创建成功
```sql
SHOW DATABASES LIKE 'school_news';
```
### 检查表是否创建成功
```sql
USE school_news;
SHOW TABLES;
```
应该看到约49张表。
### 检查默认数据是否插入成功
```sql
-- 检查默认用户
SELECT * FROM tb_sys_user;
-- 检查默认部门
SELECT * FROM tb_sys_dept;
-- 检查默认角色
SELECT * FROM tb_sys_role;
-- 检查默认权限
SELECT * FROM tb_sys_permission;
-- 检查默认菜单
SELECT * FROM tb_sys_menu;
-- 检查资源分类
SELECT * FROM tb_resource_category;
-- 检查系统配置
SELECT * FROM tb_sys_config;
-- 检查AI配置
SELECT * FROM tb_ai_agent_config;
```
## 默认账号信息
### 管理员账号
- **用户名**: admin
- **密码**: 对应的bcrypt哈希值已在SQL中原始密码请查看 createTableUser.sql 文件
- **邮箱**: 3223905473@qq.com
- **角色**: 管理员
- **部门**: 超级部门
## 常见问题
### Q1: 执行脚本时提示 "Access denied"
**原因**: MySQL用户权限不足
**解决方案**:
1. 确保使用的MySQL账号有创建数据库和表的权限
2. 使用root账号或具有足够权限的账号
### Q2: 执行脚本时提示 "Table already exists"
**原因**: 表已存在
**解决方案**:
1. 如果要重新初始化,先删除数据库:
```sql
DROP DATABASE IF EXISTS school_news;
```
2. 然后重新执行初始化脚本
### Q3: 中文乱码问题
**原因**: 字符集配置问题
**解决方案**:
1. 确保MySQL服务器配置了UTF-8字符集
2. 在my.cnf或my.ini中添加
```ini
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
```
3. 重启MySQL服务
### Q4: Windows脚本执行时中文显示乱码
**原因**: 命令行编码问题
**解决方案**:
1. 脚本已包含 `chcp 65001` 命令切换为UTF-8编码
2. 如果仍有问题,可以在命令行中手动执行:
```cmd
chcp 65001
```
### Q5: Linux脚本没有执行权限
**原因**: 文件权限问题
**解决方案**:
```bash
chmod +x init-database.sh
```
### Q6: 执行时提示 "mysql: command not found"
**原因**: MySQL客户端未安装或不在PATH中
**解决方案**:
**Windows**:
1. 将MySQL的bin目录添加到系统PATH
2. 或使用完整路径执行,例如:
```cmd
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p
```
**Linux/Mac**:
1. 安装MySQL客户端
```bash
# Ubuntu/Debian
sudo apt-get install mysql-client
# CentOS/RHEL
sudo yum install mysql
# Mac
brew install mysql-client
```
## 数据库连接配置
### JDBC连接字符串
```
jdbc:mysql://localhost:3306/school_news?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
```
### 配置参数说明
- `useUnicode=true`: 使用Unicode字符集
- `characterEncoding=utf8mb4`: 使用UTF-8编码支持表情符号
- `useSSL=false`: 禁用SSL开发环境
- `serverTimezone=Asia/Shanghai`: 设置时区
- `allowPublicKeyRetrieval=true`: 允许客户端从服务器获取公钥
## 备份与恢复
### 备份数据库
```bash
mysqldump -u root -p school_news > school_news_backup.sql
```
### 恢复数据库
```bash
mysql -u root -p school_news < school_news_backup.sql
```
### 备份单个表
```bash
mysqldump -u root -p school_news tb_sys_user > user_backup.sql
```
## 性能优化建议
### 1. 配置MySQL参数
在 my.cnf 或 my.ini 中:
```ini
[mysqld]
# InnoDB缓冲池大小建议设置为服务器内存的50-80%
innodb_buffer_pool_size = 1G
# 连接数
max_connections = 500
# 查询缓存MySQL 8.0已移除)
# query_cache_size = 64M
# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
```
### 2. 定期维护
```sql
-- 分析表
ANALYZE TABLE tb_resource;
-- 优化表
OPTIMIZE TABLE tb_learning_record;
-- 修复表
REPAIR TABLE tb_sys_user;
```
### 3. 监控慢查询
```sql
-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query_log%';
-- 查看长时间查询
SHOW PROCESSLIST;
```
## 数据迁移
### 从测试环境迁移到生产环境
1. **导出测试环境数据**
```bash
mysqldump -u root -p --single-transaction --quick school_news > school_news_test.sql
```
2. **在生产环境创建数据库**
```bash
mysql -u root -p < createDB.sql
```
3. **导入数据**
```bash
mysql -u root -p school_news < school_news_test.sql
```
4. **验证数据**
```sql
USE school_news;
SELECT COUNT(*) FROM tb_sys_user;
-- 验证其他关键表
```
## 开发规范
### 1. 表命名规范
- 系统表:`tb_sys_` 前缀
- 业务表:`tb_` + 业务名
- 关联表:`tb_` + 表名1 + `_` + 表名2
### 2. 字段命名规范
- 使用小写字母和下划线
- 主键统一使用 `id`
- 外键使用 `表名_id`
- 布尔值使用 `is_` 前缀
- 时间字段使用 `_time` 后缀
### 3. 索引命名规范
- 主键:`pk_表名`(默认)
- 唯一索引:`uk_字段名`
- 普通索引:`idx_字段名`
- 组合索引:`idx_字段1_字段2`
### 4. 注释规范
- 所有表必须有注释
- 所有字段必须有注释
- 注释使用中文,简洁明了
## 文档说明
- **README.md**: 详细的表结构说明文档
- **表结构汇总.md**: 所有表的汇总列表
- **ER关系图.md**: 表关系图Mermaid格式
- **使用说明.md**: 本文件,使用指南
## 技术支持
如遇到问题,请检查:
1. MySQL版本是否为5.7或更高
2. 字符集是否为utf8mb4
3. 是否有足够的权限
4. SQL文件是否完整
## 更新日志
### v1.0.0 (2025-10-15)
- 初始版本
- 创建49张表
- 包含8个功能模块
- 添加默认数据和配置