# 数据库初始化使用说明 ## 目录结构 ``` .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个功能模块 - 添加默认数据和配置