镜像制作
This commit is contained in:
@@ -1,288 +0,0 @@
|
||||
# 数据库文件索引
|
||||
|
||||
## 📋 文件清单
|
||||
|
||||
### SQL脚本文件
|
||||
|
||||
| 文件名 | 说明 | 表数量 | 执行顺序 |
|
||||
|--------|------|--------|----------|
|
||||
| `sql/createDB.sql` | 创建数据库 | 0 | 1 |
|
||||
| `sql/createTableUser.sql` | 用户管理模块 | 3 | 2 |
|
||||
| `sql/createTablePermission.sql` | 权限管理模块 | 8 | 3 |
|
||||
| `sql/createTableResource.sql` | 资源管理模块 | 8 | 4 |
|
||||
| `sql/createTableCourse.sql` | 课程管理模块 | 4 | 5 |
|
||||
| `sql/createTableLearning.sql` | 学习管理模块 | 6 | 6 |
|
||||
| `sql/createTableUserCenter.sql` | 个人中心模块 | 6 | 7 |
|
||||
| `sql/createTableAI.sql` | 智能体模块 | 6 | 8 |
|
||||
| `sql/createTableSystem.sql` | 系统管理模块 | 8 | 9 |
|
||||
| `sql/initAll.sql` | 一键执行所有SQL | - | - |
|
||||
|
||||
**总计**: 49张表
|
||||
|
||||
### 执行脚本
|
||||
|
||||
| 文件名 | 平台 | 说明 |
|
||||
|--------|------|------|
|
||||
| `init-database.bat` | Windows | Windows批处理脚本 |
|
||||
| `init-database.sh` | Linux/Mac | Shell脚本 |
|
||||
|
||||
### 文档文件
|
||||
|
||||
| 文件名 | 说明 | 推荐阅读 |
|
||||
|--------|------|----------|
|
||||
| `INDEX.md` | 本文件,文件索引 | ⭐⭐⭐ |
|
||||
| `使用说明.md` | 详细使用说明 | ⭐⭐⭐⭐⭐ |
|
||||
| `sql/README.md` | 表结构详细说明 | ⭐⭐⭐⭐⭐ |
|
||||
| `sql/表结构汇总.md` | 表结构汇总列表 | ⭐⭐⭐⭐ |
|
||||
| `sql/ER关系图.md` | 表关系图 | ⭐⭐⭐⭐ |
|
||||
|
||||
## 📁 完整目录结构
|
||||
|
||||
```
|
||||
.bin/mysql/
|
||||
│
|
||||
├── init-database.bat # Windows初始化脚本
|
||||
├── init-database.sh # Linux/Mac初始化脚本
|
||||
├── INDEX.md # 本文件
|
||||
├── 使用说明.md # 使用指南
|
||||
│
|
||||
└── sql/ # SQL脚本目录
|
||||
├── createDB.sql # [1] 创建数据库
|
||||
│
|
||||
├── createTableUser.sql # [2] 用户管理模块
|
||||
│ ├── tb_sys_user # 用户表
|
||||
│ ├── tb_sys_user_info # 用户信息表
|
||||
│ └── tb_sys_login_log # 登录日志表
|
||||
│
|
||||
├── createTablePermission.sql # [3] 权限管理模块
|
||||
│ ├── tb_sys_dept # 部门表
|
||||
│ ├── tb_sys_role # 角色表
|
||||
│ ├── tb_sys_dept_role # 部门-角色关联表
|
||||
│ ├── tb_sys_user_dept_role # 用户-部门-角色关联表
|
||||
│ ├── tb_sys_permission # 权限表
|
||||
│ ├── tb_sys_role_permission # 角色-权限关联表
|
||||
│ ├── tb_sys_menu # 菜单表
|
||||
│ └── tb_sys_menu_permission # 菜单-权限关联表
|
||||
│
|
||||
├── createTableResource.sql # [4] 资源管理模块
|
||||
│ ├── tb_resource # 资源表
|
||||
│ ├── tb_resource_category # 资源分类表
|
||||
│ ├── tb_banner # Banner表
|
||||
│ ├── tb_resource_recommend # 资源推荐表
|
||||
│ ├── tb_tag # 标签表
|
||||
│ ├── tb_resource_tag # 资源-标签关联表
|
||||
│ ├── tb_data_collection_config # 数据采集配置表
|
||||
│ └── tb_data_collection_log # 数据采集记录表
|
||||
│
|
||||
├── createTableCourse.sql # [5] 课程管理模块
|
||||
│ ├── tb_course # 课程表
|
||||
│ ├── tb_course_chapter # 课程章节表
|
||||
│ ├── tb_course_tag # 课程-标签关联表
|
||||
│ └── tb_course_dept # 课程-部门权限表
|
||||
│
|
||||
├── createTableLearning.sql # [6] 学习管理模块
|
||||
│ ├── tb_learning_task # 学习任务表
|
||||
│ ├── tb_task_resource # 任务-资源关联表
|
||||
│ ├── tb_task_course # 任务-课程关联表
|
||||
│ ├── tb_task_user # 任务-用户表
|
||||
│ ├── tb_learning_record # 学习记录表
|
||||
│ └── tb_learning_statistics # 学习统计表
|
||||
│
|
||||
├── createTableUserCenter.sql # [7] 个人中心模块
|
||||
│ ├── tb_user_collection # 用户收藏表
|
||||
│ ├── tb_achievement # 成就表
|
||||
│ ├── tb_user_achievement # 用户-成就关联表
|
||||
│ ├── tb_user_points # 用户积分表
|
||||
│ ├── tb_points_record # 积分记录表
|
||||
│ └── tb_user_browse_record # 用户浏览记录表
|
||||
│
|
||||
├── createTableAI.sql # [8] 智能体模块
|
||||
│ ├── tb_ai_agent_config # 智能体配置表
|
||||
│ ├── tb_ai_knowledge # 知识库表
|
||||
│ ├── tb_ai_conversation # 对话会话表
|
||||
│ ├── tb_ai_message # 对话消息表
|
||||
│ ├── tb_ai_upload_file # 上传文件表
|
||||
│ └── tb_ai_usage_statistics # AI使用统计表
|
||||
│
|
||||
├── createTableSystem.sql # [9] 系统管理模块
|
||||
│ ├── tb_sys_operation_log # 操作日志表
|
||||
│ ├── tb_sys_config # 系统配置表
|
||||
│ ├── tb_sys_visit_statistics # 访问统计表
|
||||
│ ├── tb_sys_notification # 系统通知表
|
||||
│ ├── tb_sys_file # 文件上传记录表
|
||||
│ ├── tb_sys_dict_type # 数据字典类型表
|
||||
│ └── tb_sys_dict_data # 数据字典详情表
|
||||
│
|
||||
├── initAll.sql # 一键执行所有SQL
|
||||
├── README.md # 表结构详细说明
|
||||
├── 表结构汇总.md # 表结构汇总
|
||||
└── ER关系图.md # 表关系图
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 第一次使用
|
||||
|
||||
1. **阅读使用说明**
|
||||
```
|
||||
打开 使用说明.md
|
||||
```
|
||||
|
||||
2. **执行初始化脚本**
|
||||
|
||||
**Windows:**
|
||||
```cmd
|
||||
双击 init-database.bat
|
||||
```
|
||||
|
||||
**Linux/Mac:**
|
||||
```bash
|
||||
chmod +x init-database.sh
|
||||
./init-database.sh
|
||||
```
|
||||
|
||||
3. **验证安装**
|
||||
```sql
|
||||
USE school_news;
|
||||
SHOW TABLES;
|
||||
```
|
||||
|
||||
### 了解表结构
|
||||
|
||||
1. **快速查看**:阅读 `sql/表结构汇总.md`
|
||||
2. **详细了解**:阅读 `sql/README.md`
|
||||
3. **理解关系**:阅读 `sql/ER关系图.md`
|
||||
|
||||
## 📊 模块说明
|
||||
|
||||
### 1️⃣ 用户管理模块
|
||||
负责用户账号、用户信息和登录日志管理。
|
||||
|
||||
**核心表**:
|
||||
- tb_sys_user (用户表)
|
||||
- tb_sys_user_info (用户信息表)
|
||||
|
||||
### 2️⃣ 权限管理模块
|
||||
实现RBAC权限控制,支持部门、角色、权限、菜单管理。
|
||||
|
||||
**核心表**:
|
||||
- tb_sys_dept (部门表)
|
||||
- tb_sys_role (角色表)
|
||||
- tb_sys_permission (权限表)
|
||||
|
||||
### 3️⃣ 资源管理模块
|
||||
管理新闻资源、分类、标签、推荐和数据采集。
|
||||
|
||||
**核心表**:
|
||||
- tb_resource (资源表)
|
||||
- tb_resource_category (资源分类表)
|
||||
- tb_banner (Banner表)
|
||||
|
||||
### 4️⃣ 课程管理模块
|
||||
管理在线课程、章节、标签和权限。
|
||||
|
||||
**核心表**:
|
||||
- tb_course (课程表)
|
||||
- tb_course_chapter (章节表)
|
||||
|
||||
### 5️⃣ 学习管理模块
|
||||
管理学习任务、学习记录和统计数据。
|
||||
|
||||
**核心表**:
|
||||
- tb_learning_task (学习任务表)
|
||||
- tb_learning_record (学习记录表)
|
||||
- tb_learning_statistics (学习统计表)
|
||||
|
||||
### 6️⃣ 个人中心模块
|
||||
管理用户收藏、成就、积分和浏览记录。
|
||||
|
||||
**核心表**:
|
||||
- tb_user_collection (收藏表)
|
||||
- tb_achievement (成就表)
|
||||
- tb_user_points (积分表)
|
||||
|
||||
### 7️⃣ 智能体模块
|
||||
提供AI对话、知识库和文件问答功能。
|
||||
|
||||
**核心表**:
|
||||
- tb_ai_agent_config (AI配置表)
|
||||
- tb_ai_knowledge (知识库表)
|
||||
- tb_ai_conversation (对话会话表)
|
||||
|
||||
### 8️⃣ 系统管理模块
|
||||
管理系统配置、日志、通知和文件。
|
||||
|
||||
**核心表**:
|
||||
- tb_sys_config (系统配置表)
|
||||
- tb_sys_operation_log (操作日志表)
|
||||
- tb_sys_notification (通知表)
|
||||
|
||||
## 📈 数据量预估
|
||||
|
||||
| 模块 | 预估数据量 | 增长速度 |
|
||||
|------|-----------|----------|
|
||||
| 用户管理 | 1万-10万 | 缓慢 |
|
||||
| 权限管理 | 100-1000 | 缓慢 |
|
||||
| 资源管理 | 1万-100万 | 中等 |
|
||||
| 课程管理 | 100-10000 | 缓慢 |
|
||||
| 学习管理 | 10万-1000万 | 快速 |
|
||||
| 个人中心 | 10万-1000万 | 中等 |
|
||||
| 智能体 | 10万-1000万 | 快速 |
|
||||
| 系统管理 | 100万-1亿 | 快速 |
|
||||
|
||||
## 🔧 维护建议
|
||||
|
||||
### 日常维护
|
||||
- 每天备份数据库
|
||||
- 每周清理过期日志
|
||||
- 每月统计表分析
|
||||
|
||||
### 性能优化
|
||||
- 定期执行 ANALYZE TABLE
|
||||
- 监控慢查询日志
|
||||
- 适时添加索引
|
||||
|
||||
### 数据归档
|
||||
- 登录日志:保留3个月
|
||||
- 操作日志:保留6个月
|
||||
- 学习记录:永久保存
|
||||
- 浏览记录:保留1年
|
||||
|
||||
## 📝 版本信息
|
||||
|
||||
- **版本**: v1.0.0
|
||||
- **发布日期**: 2025-10-15
|
||||
- **数据库**: MySQL 5.7+
|
||||
- **字符集**: utf8mb4
|
||||
- **引擎**: InnoDB
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- [MySQL官方文档](https://dev.mysql.com/doc/)
|
||||
- [数据库设计规范](https://www.cnblogs.com/huchong/p/10219318.html)
|
||||
- [SQL优化指南](https://developer.aliyun.com/article/72501)
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如有问题,请检查:
|
||||
1. MySQL版本 >= 5.7
|
||||
2. 字符集为 utf8mb4
|
||||
3. 存储引擎为 InnoDB
|
||||
4. 是否有足够的磁盘空间
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **首次运行**前,请备份现有数据库
|
||||
2. **生产环境**使用前,请修改默认密码
|
||||
3. **定期备份**数据,防止数据丢失
|
||||
4. **性能监控**,及时发现并解决问题
|
||||
5. **安全加固**,限制数据库访问权限
|
||||
|
||||
## 📅 更新计划
|
||||
|
||||
- [ ] 添加数据字典详细说明
|
||||
- [ ] 补充性能测试报告
|
||||
- [ ] 增加示例数据脚本
|
||||
- [ ] 提供Docker部署方案
|
||||
- [ ] 添加自动化测试用例
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "====================================================="
|
||||
echo "校园思政新闻平台数据库初始化脚本"
|
||||
echo "====================================================="
|
||||
echo ""
|
||||
|
||||
# 设置默认值
|
||||
MYSQL_HOST="localhost"
|
||||
MYSQL_PORT="3306"
|
||||
MYSQL_USER="root"
|
||||
MYSQL_PASSWORD="123456"
|
||||
|
||||
# 读取用户输入
|
||||
read -p "MySQL主机地址 [默认: localhost]: " input_host
|
||||
MYSQL_HOST=${input_host:-$MYSQL_HOST}
|
||||
|
||||
read -p "MySQL端口 [默认: 3306]: " input_port
|
||||
MYSQL_PORT=${input_port:-$MYSQL_PORT}
|
||||
|
||||
read -p "MySQL用户名 [默认: root]: " input_user
|
||||
MYSQL_USER=${input_user:-$MYSQL_USER}
|
||||
|
||||
read -sp "MySQL密码[默认: 123456]: " input_password
|
||||
MYSQL_PASSWORD=${input_password:-$MYSQL_PASSWORD}
|
||||
echo ""
|
||||
|
||||
# 切换到sql目录
|
||||
cd sql || exit 1
|
||||
|
||||
# 定义执行SQL的函数
|
||||
execute_sql() {
|
||||
local file=$1
|
||||
local description=$2
|
||||
|
||||
echo "[$description]"
|
||||
|
||||
if [ -z "$MYSQL_PASSWORD" ]; then
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" < "$file"
|
||||
else
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" < "$file"
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误: $description 失败!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行SQL文件
|
||||
execute_sql "createDB.sql" "1/9 创建数据库"
|
||||
execute_sql "createTableUser.sql" "2/9 创建用户相关表"
|
||||
execute_sql "createTablePermission.sql" "3/9 创建权限相关表"
|
||||
execute_sql "createTableResource.sql" "4/9 创建资源管理相关表"
|
||||
execute_sql "createTableCourse.sql" "5/9 创建课程管理相关表"
|
||||
execute_sql "createTableLearning.sql" "6/9 创建学习管理相关表"
|
||||
execute_sql "createTableUserCenter.sql" "7/9 创建个人中心相关表"
|
||||
execute_sql "createTableAI.sql" "8/9 创建智能体相关表"
|
||||
execute_sql "createTableSystem.sql" "9/9 创建系统配置和日志相关表"
|
||||
|
||||
cd ..
|
||||
|
||||
echo ""
|
||||
echo "====================================================="
|
||||
echo "数据库初始化完成!"
|
||||
echo "====================================================="
|
||||
echo "数据库名: school_news"
|
||||
echo "默认用户: admin"
|
||||
echo "默认密码: 详见 createTableUser.sql"
|
||||
echo "====================================================="
|
||||
echo ""
|
||||
|
||||
@@ -14,12 +14,12 @@ YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 数据库配置
|
||||
DB_HOST="localhost"
|
||||
DB_PORT="3306"
|
||||
DB_USER="root"
|
||||
DB_PASSWORD="123456"
|
||||
DB_NAME="school_news"
|
||||
# 数据库配置(优先使用环境变量)
|
||||
DB_HOST="${DB_HOST:-localhost}"
|
||||
DB_PORT="${DB_PORT:-3306}"
|
||||
DB_USER="${DB_USER:-root}"
|
||||
DB_PASSWORD="${DB_PASSWORD:-123456}"
|
||||
DB_NAME="${DB_NAME:-school_news}"
|
||||
|
||||
# 脚本目录
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -101,19 +101,6 @@ execute_init_script() {
|
||||
import_sensitive_words() {
|
||||
print_message $BLUE "开始导入敏感词数据..."
|
||||
|
||||
# 检查conda是否可用
|
||||
if ! command -v conda &> /dev/null; then
|
||||
print_message $YELLOW "conda命令未找到,跳过敏感词导入"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 检查schoolNewsCrawler环境是否存在
|
||||
if ! conda env list | grep -q "schoolNewsCrawler"; then
|
||||
print_message $YELLOW "conda环境 'schoolNewsCrawler' 不存在,跳过敏感词导入"
|
||||
print_message $YELLOW "提示: 可以使用以下命令创建环境: conda create -n schoolNewsCrawler python=3.10"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 切换到敏感词脚本目录
|
||||
local sensitive_dir="$SCRIPT_DIR/sensitiveData"
|
||||
if [ ! -d "$sensitive_dir" ]; then
|
||||
@@ -121,25 +108,63 @@ import_sensitive_words() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ ! -f "$sensitive_dir/writeWord.py" ]; then
|
||||
print_message $YELLOW "敏感词脚本不存在: $sensitive_dir/writeWord.py"
|
||||
# 检查Shell脚本是否存在
|
||||
if [ -f "$sensitive_dir/importSensitiveWords.sh" ]; then
|
||||
print_message $BLUE "使用Shell脚本导入敏感词"
|
||||
cd "$sensitive_dir"
|
||||
|
||||
# 导出数据库配置环境变量
|
||||
export DB_HOST="$DB_HOST"
|
||||
export DB_PORT="$DB_PORT"
|
||||
export DB_USER="$DB_USER"
|
||||
export DB_PASSWORD="$DB_PASSWORD"
|
||||
export DB_NAME="$DB_NAME"
|
||||
export AUTO_CONFIRM=true
|
||||
|
||||
bash importSensitiveWords.sh -y
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
print_message $GREEN "敏感词数据导入成功"
|
||||
else
|
||||
print_message $YELLOW "敏感词数据导入失败,但不影响系统运行"
|
||||
fi
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
return 0
|
||||
fi
|
||||
|
||||
print_message $BLUE "激活conda环境: schoolNewsCrawler"
|
||||
cd "$sensitive_dir"
|
||||
|
||||
# 使用conda run来在指定环境中执行命令,添加-y参数自动确认
|
||||
conda run -n schoolNewsCrawler python writeWord.py -y
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
print_message $GREEN "敏感词数据导入成功"
|
||||
else
|
||||
print_message $YELLOW "敏感词数据导入失败,但不影响系统运行"
|
||||
# 兼容旧的Python脚本(如果Shell脚本不存在)
|
||||
if [ -f "$sensitive_dir/writeWord.py" ]; then
|
||||
print_message $YELLOW "使用Python脚本导入敏感词(建议使用Shell版本)"
|
||||
|
||||
# 检查conda是否可用
|
||||
if ! command -v conda &> /dev/null; then
|
||||
print_message $YELLOW "conda命令未找到,跳过敏感词导入"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 检查schoolNewsCrawler环境是否存在
|
||||
if ! conda env list | grep -q "schoolNewsCrawler"; then
|
||||
print_message $YELLOW "conda环境 'schoolNewsCrawler' 不存在,跳过敏感词导入"
|
||||
return 0
|
||||
fi
|
||||
|
||||
cd "$sensitive_dir"
|
||||
conda run -n schoolNewsCrawler python writeWord.py -y
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
print_message $GREEN "敏感词数据导入成功"
|
||||
else
|
||||
print_message $YELLOW "敏感词数据导入失败,但不影响系统运行"
|
||||
fi
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 返回脚本目录
|
||||
cd "$SCRIPT_DIR"
|
||||
# 如果两个脚本都不存在
|
||||
print_message $YELLOW "敏感词导入脚本不存在,跳过导入"
|
||||
print_message $YELLOW "提示: 可以使用 importSensitiveWords.sh (推荐) 或 writeWord.py"
|
||||
}
|
||||
|
||||
# 验证初始化结果
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
#!/bin/bash
|
||||
|
||||
##############################################
|
||||
# 敏感词批量导入脚本 (纯Shell实现)
|
||||
# 功能:从 sensitive_word_dict.txt 读取敏感词并导入数据库
|
||||
# 优势:不需要Python环境,只需要MySQL客户端
|
||||
##############################################
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 数据库配置
|
||||
DB_HOST="${DB_HOST:-localhost}"
|
||||
DB_PORT="${DB_PORT:-3306}"
|
||||
DB_USER="${DB_USER:-root}"
|
||||
DB_PASSWORD="${DB_PASSWORD:-123456}"
|
||||
DB_NAME="${DB_NAME:-school_news}"
|
||||
|
||||
# 脚本目录
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
DICT_FILE="${SCRIPT_DIR}/sensitive_word_dict.txt"
|
||||
|
||||
echo "=================================================="
|
||||
echo "敏感词批量导入工具 (Shell版本)"
|
||||
echo "=================================================="
|
||||
log_info "数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
|
||||
log_info "敏感词文件: ${DICT_FILE}"
|
||||
echo "=================================================="
|
||||
echo ""
|
||||
|
||||
# 检查敏感词文件
|
||||
if [ ! -f "${DICT_FILE}" ]; then
|
||||
log_error "敏感词文件不存在: ${DICT_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 统计敏感词数量
|
||||
TOTAL_WORDS=$(grep -v '^$' "${DICT_FILE}" | wc -l)
|
||||
log_info "检测到 ${TOTAL_WORDS} 个敏感词"
|
||||
|
||||
if [ ${TOTAL_WORDS} -eq 0 ]; then
|
||||
log_warn "敏感词文件为空"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 检查MySQL连接
|
||||
log_info "检查数据库连接..."
|
||||
if ! mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" -e "SELECT 1;" &>/dev/null; then
|
||||
log_error "数据库连接失败"
|
||||
exit 1
|
||||
fi
|
||||
log_info "数据库连接成功"
|
||||
echo ""
|
||||
|
||||
# 确认导入
|
||||
log_warn "准备导入 ${TOTAL_WORDS} 个敏感词到数据库"
|
||||
log_warn "这将清除现有的 deny 类型敏感词"
|
||||
echo ""
|
||||
|
||||
# 检查是否是自动模式(通过 -y 参数或环境变量)
|
||||
AUTO_CONFIRM=${AUTO_CONFIRM:-false}
|
||||
if [ "$1" = "-y" ] || [ "$1" = "--yes" ] || [ "${AUTO_CONFIRM}" = "true" ]; then
|
||||
log_info "自动确认模式,开始导入..."
|
||||
else
|
||||
read -p "是否继续?(y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
log_warn "用户取消导入"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 开始导入
|
||||
log_info "开始导入敏感词..."
|
||||
START_TIME=$(date +%s)
|
||||
|
||||
# 创建临时SQL文件
|
||||
TEMP_SQL=$(mktemp)
|
||||
trap "rm -f ${TEMP_SQL}" EXIT
|
||||
|
||||
# 生成SQL语句
|
||||
log_info "生成SQL语句..."
|
||||
cat > "${TEMP_SQL}" <<EOF
|
||||
-- 敏感词批量导入
|
||||
USE ${DB_NAME};
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 清除现有的deny类型敏感词
|
||||
DELETE FROM tb_sensitive_word WHERE type = 'deny';
|
||||
|
||||
-- 批量插入敏感词
|
||||
INSERT INTO tb_sensitive_word (word, type) VALUES
|
||||
EOF
|
||||
|
||||
# 读取敏感词并生成INSERT语句
|
||||
COUNTER=0
|
||||
while IFS= read -r word || [ -n "$word" ]; do
|
||||
# 跳过空行
|
||||
[ -z "$word" ] && continue
|
||||
|
||||
# 转义单引号
|
||||
word=$(echo "$word" | sed "s/'/''/g")
|
||||
|
||||
COUNTER=$((COUNTER + 1))
|
||||
|
||||
# 添加到SQL(最后一个不加逗号)
|
||||
if [ $COUNTER -eq ${TOTAL_WORDS} ]; then
|
||||
echo "('${word}', 'deny');" >> "${TEMP_SQL}"
|
||||
else
|
||||
echo "('${word}', 'deny')," >> "${TEMP_SQL}"
|
||||
fi
|
||||
|
||||
# 进度提示(每1000个)
|
||||
if [ $((COUNTER % 1000)) -eq 0 ]; then
|
||||
log_info "已处理 ${COUNTER}/${TOTAL_WORDS} 个敏感词..."
|
||||
fi
|
||||
done < "${DICT_FILE}"
|
||||
|
||||
# 添加查询语句
|
||||
cat >> "${TEMP_SQL}" <<EOF
|
||||
|
||||
-- 验证导入结果
|
||||
SELECT COUNT(*) AS '导入数量' FROM tb_sensitive_word WHERE type = 'deny';
|
||||
EOF
|
||||
|
||||
log_info "SQL语句生成完成(${COUNTER}个敏感词)"
|
||||
echo ""
|
||||
|
||||
# 执行SQL
|
||||
log_info "执行数据库导入..."
|
||||
if mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" < "${TEMP_SQL}"; then
|
||||
END_TIME=$(date +%s)
|
||||
DURATION=$((END_TIME - START_TIME))
|
||||
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
log_info "导入完成!"
|
||||
log_info "成功导入: ${COUNTER} 个敏感词"
|
||||
log_info "耗时: ${DURATION} 秒"
|
||||
echo "=================================================="
|
||||
else
|
||||
log_error "数据库导入失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 验证结果
|
||||
log_info "验证导入结果..."
|
||||
IMPORTED_COUNT=$(mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" -D"${DB_NAME}" -sNe \
|
||||
"SELECT COUNT(*) FROM tb_sensitive_word WHERE type = 'deny';")
|
||||
|
||||
echo ""
|
||||
log_info "数据库中当前有 ${IMPORTED_COUNT} 个 deny 类型敏感词"
|
||||
|
||||
if [ "${IMPORTED_COUNT}" -eq "${COUNTER}" ]; then
|
||||
log_info "✅ 验证通过:导入数量与预期一致"
|
||||
else
|
||||
log_warn "⚠️ 导入数量不匹配:预期 ${COUNTER},实际 ${IMPORTED_COUNT}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "敏感词导入完成!"
|
||||
@@ -1,393 +0,0 @@
|
||||
# 数据库初始化使用说明
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
.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个功能模块
|
||||
- 添加默认数据和配置
|
||||
|
||||
Reference in New Issue
Block a user