#!/bin/bash # ===================================================== # 校园思政新闻平台数据库重新初始化脚本 # 版本: 1.0.0 # 说明: 该脚本会删除现有数据库,重新创建并初始化所有数据 # 注意: 执行前请确保MySQL服务已启动,并且有足够的权限 # ===================================================== # 设置颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 数据库配置(优先使用环境变量) 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)" # 日志文件 LOG_FILE="$SCRIPT_DIR/reInit.log" # 打印带颜色的消息 print_message() { local color=$1 local message=$2 echo -e "${color}${message}${NC}" echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE" } # 检查MySQL连接 check_mysql_connection() { print_message $BLUE "检查MySQL连接..." if command -v mysql &> /dev/null; then if mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -e "SELECT 1;" &> /dev/null; then print_message $GREEN "MySQL连接成功" return 0 else print_message $RED "MySQL连接失败,请检查配置" return 1 fi else print_message $RED "MySQL客户端未安装或不在PATH中" return 1 fi } # 备份现有数据库(如果存在) backup_database() { if mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -e "USE $DB_NAME;" &> /dev/null; then print_message $YELLOW "发现现有数据库,正在备份..." local backup_file="$SCRIPT_DIR/backup_${DB_NAME}_$(date +%Y%m%d_%H%M%S).sql" mysqldump -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$backup_file" if [ $? -eq 0 ]; then print_message $GREEN "数据库备份成功: $backup_file" else print_message $YELLOW "数据库备份失败,继续执行..." fi fi } # 删除现有数据库 drop_database() { print_message $YELLOW "删除现有数据库..." mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -e "DROP DATABASE IF EXISTS $DB_NAME;" if [ $? -eq 0 ]; then print_message $GREEN "数据库删除成功" else print_message $RED "数据库删除失败" exit 1 fi } # 执行初始化脚本 execute_init_script() { print_message $BLUE "开始执行数据库初始化..." # 切换到脚本目录 cd "$SCRIPT_DIR" # 执行initAll.sql mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" < initAll.sql if [ $? -eq 0 ]; then print_message $GREEN "数据库初始化成功" else print_message $RED "数据库初始化失败" exit 1 fi } # 执行敏感词导入 import_sensitive_words() { print_message $BLUE "开始导入敏感词数据..." # 切换到敏感词脚本目录 local sensitive_dir="$SCRIPT_DIR/sensitiveData" if [ ! -d "$sensitive_dir" ]; then print_message $YELLOW "敏感词脚本目录不存在: $sensitive_dir" return 0 fi # 检查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 # 兼容旧的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 # 如果两个脚本都不存在 print_message $YELLOW "敏感词导入脚本不存在,跳过导入" print_message $YELLOW "提示: 可以使用 importSensitiveWords.sh (推荐) 或 writeWord.py" } # 验证初始化结果 verify_initialization() { print_message $BLUE "验证初始化结果..." # 检查数据库是否存在 if mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -e "USE $DB_NAME;" &> /dev/null; then print_message $GREEN "数据库创建成功" else print_message $RED "数据库创建失败" exit 1 fi # 检查表数量 local table_count=$(mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -D"$DB_NAME" -e "SHOW TABLES;" | wc -l) print_message $GREEN "创建了 $table_count 张表" # 检查默认用户 local user_count=$(mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -D"$DB_NAME" -e "SELECT COUNT(*) FROM tb_sys_user WHERE username='admin';" | tail -n 1) if [ "$user_count" -gt 0 ]; then print_message $GREEN "默认用户创建成功" else print_message $YELLOW "默认用户创建失败" fi # 检查敏感词数量 local sensitive_count=$(mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -D"$DB_NAME" -e "SELECT COUNT(*) FROM tb_sensitive_word;" 2>/dev/null | tail -n 1) if [ -n "$sensitive_count" ] && [ "$sensitive_count" -gt 0 ]; then print_message $GREEN "敏感词数据: $sensitive_count 个" else print_message $YELLOW "敏感词数据: 0 个 (可能未导入或表不存在)" fi } # 显示初始化信息 show_initialization_info() { print_message $BLUE "=====================================================" print_message $GREEN "数据库初始化完成!" print_message $BLUE "=====================================================" print_message $YELLOW "数据库信息:" print_message $YELLOW " 数据库名: $DB_NAME" print_message $YELLOW " 主机: $DB_HOST" print_message $YELLOW " 端口: $DB_PORT" print_message $YELLOW " 用户: $DB_USER" print_message $BLUE "=====================================================" print_message $YELLOW "默认账户信息:" print_message $YELLOW " 用户名: admin" print_message $YELLOW " 密码: admin123" print_message $YELLOW " 角色: 管理员" print_message $BLUE "=====================================================" print_message $YELLOW "系统功能:" print_message $YELLOW " - 用户管理" print_message $YELLOW " - 权限管理" print_message $YELLOW " - 资源管理" print_message $YELLOW " - 学习管理" print_message $YELLOW " - AI智能体" print_message $YELLOW " - 系统配置" print_message $YELLOW " - 文件管理" print_message $YELLOW " - 敏感词过滤" print_message $YELLOW " - 消息通知" print_message $BLUE "=====================================================" } # 主函数 main() { print_message $BLUE "=====================================================" print_message $BLUE "校园思政新闻平台数据库重新初始化脚本" print_message $BLUE "版本: 1.1.0" print_message $BLUE "=====================================================" # 检查MySQL连接 if ! check_mysql_connection; then exit 1 fi # 备份现有数据库 # backup_database # 删除现有数据库 # drop_database # 执行初始化脚本 execute_init_script # 导入敏感词数据 # 验证初始化结果 verify_initialization # 显示初始化信息 show_initialization_info import_sensitive_words print_message $GREEN "初始化完成!" } # 脚本入口 if [ "${BASH_SOURCE[0]}" == "${0}" ]; then main "$@" fi