2025-10-16 18:03:46 +08:00
|
|
|
|
#!/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
|
|
|
|
|
|
|
2025-11-24 11:50:15 +08:00
|
|
|
|
# 数据库配置(优先使用环境变量)
|
|
|
|
|
|
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}"
|
2025-10-16 18:03:46 +08:00
|
|
|
|
|
|
|
|
|
|
# 脚本目录
|
|
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-22 16:01:36 +08:00
|
|
|
|
# 执行敏感词导入
|
|
|
|
|
|
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
|
|
|
|
|
|
|
2025-11-24 11:50:15 +08:00
|
|
|
|
# 检查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"
|
2025-11-22 16:01:36 +08:00
|
|
|
|
return 0
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-24 11:50:15 +08:00
|
|
|
|
# 兼容旧的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
|
2025-11-22 16:01:36 +08:00
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-24 11:50:15 +08:00
|
|
|
|
# 如果两个脚本都不存在
|
|
|
|
|
|
print_message $YELLOW "敏感词导入脚本不存在,跳过导入"
|
|
|
|
|
|
print_message $YELLOW "提示: 可以使用 importSensitiveWords.sh (推荐) 或 writeWord.py"
|
2025-11-22 16:01:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-16 18:03:46 +08:00
|
|
|
|
# 验证初始化结果
|
|
|
|
|
|
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
|
2025-11-22 16:01:36 +08:00
|
|
|
|
|
|
|
|
|
|
# 检查敏感词数量
|
|
|
|
|
|
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
|
2025-10-16 18:03:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 显示初始化信息
|
|
|
|
|
|
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 " - 系统配置"
|
2025-10-18 17:57:14 +08:00
|
|
|
|
print_message $YELLOW " - 文件管理"
|
2025-11-22 16:01:36 +08:00
|
|
|
|
print_message $YELLOW " - 敏感词过滤"
|
|
|
|
|
|
print_message $YELLOW " - 消息通知"
|
2025-10-16 18:03:46 +08:00
|
|
|
|
print_message $BLUE "====================================================="
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 主函数
|
|
|
|
|
|
main() {
|
|
|
|
|
|
print_message $BLUE "====================================================="
|
|
|
|
|
|
print_message $BLUE "校园思政新闻平台数据库重新初始化脚本"
|
2025-11-22 16:01:36 +08:00
|
|
|
|
print_message $BLUE "版本: 1.1.0"
|
2025-10-16 18:03:46 +08:00
|
|
|
|
print_message $BLUE "====================================================="
|
|
|
|
|
|
|
|
|
|
|
|
# 检查MySQL连接
|
|
|
|
|
|
if ! check_mysql_connection; then
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# 备份现有数据库
|
|
|
|
|
|
# backup_database
|
|
|
|
|
|
|
|
|
|
|
|
# 删除现有数据库
|
|
|
|
|
|
# drop_database
|
|
|
|
|
|
|
|
|
|
|
|
# 执行初始化脚本
|
|
|
|
|
|
execute_init_script
|
|
|
|
|
|
|
2025-11-22 16:01:36 +08:00
|
|
|
|
# 导入敏感词数据
|
|
|
|
|
|
|
2025-10-16 18:03:46 +08:00
|
|
|
|
# 验证初始化结果
|
|
|
|
|
|
verify_initialization
|
|
|
|
|
|
|
|
|
|
|
|
# 显示初始化信息
|
|
|
|
|
|
show_initialization_info
|
2025-11-22 16:01:36 +08:00
|
|
|
|
import_sensitive_words
|
|
|
|
|
|
|
2025-10-16 18:03:46 +08:00
|
|
|
|
print_message $GREEN "初始化完成!"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 脚本入口
|
|
|
|
|
|
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
|
|
|
|
|
main "$@"
|
|
|
|
|
|
fi
|