232 lines
6.7 KiB
Bash
232 lines
6.7 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
##############################################
|
|||
|
|
# 数据库初始化SQL准备脚本
|
|||
|
|
# 功能:将SQL文件复制到Docker初始化目录
|
|||
|
|
# 基于:schoolNewsServ/.bin/mysql/sql/reInit.sh
|
|||
|
|
##############################################
|
|||
|
|
|
|||
|
|
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"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 路径定义
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
SQL_SOURCE_DIR="../../schoolNewsServ/.bin/mysql/sql"
|
|||
|
|
INIT_DB_DIR="$SCRIPT_DIR"
|
|||
|
|
|
|||
|
|
echo "========================================"
|
|||
|
|
echo "数据库初始化SQL准备"
|
|||
|
|
echo "========================================"
|
|||
|
|
log_info "源SQL目录: $SQL_SOURCE_DIR"
|
|||
|
|
log_info "目标目录: $INIT_DB_DIR"
|
|||
|
|
echo "========================================"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查源目录
|
|||
|
|
if [ ! -d "$SQL_SOURCE_DIR" ]; then
|
|||
|
|
log_error "源SQL目录不存在: $SQL_SOURCE_DIR"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 备份现有SQL文件
|
|||
|
|
if ls "$INIT_DB_DIR"/*.sql 1> /dev/null 2>&1; then
|
|||
|
|
log_warn "发现现有SQL文件,正在备份..."
|
|||
|
|
BACKUP_DIR="$INIT_DB_DIR/backup_$(date +%Y%m%d_%H%M%S)"
|
|||
|
|
mkdir -p "$BACKUP_DIR"
|
|||
|
|
mv "$INIT_DB_DIR"/*.sql "$BACKUP_DIR/" 2>/dev/null || true
|
|||
|
|
log_info "已备份到: $BACKUP_DIR"
|
|||
|
|
echo ""
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 创建02-create-tables.sql
|
|||
|
|
log_info "创建表结构脚本: 02-create-tables.sql"
|
|||
|
|
cat > "$INIT_DB_DIR/02-create-tables.sql" << 'EOF'
|
|||
|
|
-- ========================================
|
|||
|
|
-- 校园新闻管理系统 - 表结构创建脚本
|
|||
|
|
-- 自动生成时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|||
|
|
-- 基于: schoolNewsServ/.bin/mysql/sql/
|
|||
|
|
-- ========================================
|
|||
|
|
|
|||
|
|
USE school_news;
|
|||
|
|
|
|||
|
|
-- 检查是否已执行过此脚本
|
|||
|
|
SET @executed = (SELECT COUNT(*) FROM _db_init_status WHERE script_name = '02-create-tables.sql');
|
|||
|
|
|
|||
|
|
-- 如果已执行过,记录并退出
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN @executed > 0 THEN '表结构已存在,跳过创建'
|
|||
|
|
ELSE '开始创建表结构...'
|
|||
|
|
END AS message;
|
|||
|
|
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
# 合并所有createTable*.sql文件
|
|||
|
|
log_info "合并表结构文件..."
|
|||
|
|
TABLE_FILES=(
|
|||
|
|
"createTableUser.sql"
|
|||
|
|
"createTablePermission.sql"
|
|||
|
|
"createTablePermissionControl.sql"
|
|||
|
|
"createTableResource.sql"
|
|||
|
|
"createTableCourse.sql"
|
|||
|
|
"createTableLearning.sql"
|
|||
|
|
"createTableUserCenter.sql"
|
|||
|
|
"createTableAI.sql"
|
|||
|
|
"createTableSystem.sql"
|
|||
|
|
"createTableAchievement.sql"
|
|||
|
|
"createTableCrontab.sql"
|
|||
|
|
"createTableMessage.sql"
|
|||
|
|
"createTableSensitive.sql"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
for file in "${TABLE_FILES[@]}"; do
|
|||
|
|
if [ -f "$SQL_SOURCE_DIR/$file" ]; then
|
|||
|
|
echo "" >> "$INIT_DB_DIR/02-create-tables.sql"
|
|||
|
|
echo "-- ========================================" >> "$INIT_DB_DIR/02-create-tables.sql"
|
|||
|
|
echo "-- $file" >> "$INIT_DB_DIR/02-create-tables.sql"
|
|||
|
|
echo "-- ========================================" >> "$INIT_DB_DIR/02-create-tables.sql"
|
|||
|
|
cat "$SQL_SOURCE_DIR/$file" >> "$INIT_DB_DIR/02-create-tables.sql"
|
|||
|
|
log_info " ✓ $file"
|
|||
|
|
else
|
|||
|
|
log_warn " ✗ $file (文件不存在)"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# 添加执行状态记录
|
|||
|
|
cat >> "$INIT_DB_DIR/02-create-tables.sql" << 'EOF'
|
|||
|
|
|
|||
|
|
-- 记录执行状态
|
|||
|
|
INSERT IGNORE INTO _db_init_status (script_name)
|
|||
|
|
VALUES ('02-create-tables.sql');
|
|||
|
|
|
|||
|
|
SELECT '表结构创建完成' AS message;
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 创建03-init-data.sql
|
|||
|
|
log_info "创建初始数据脚本: 03-init-data.sql"
|
|||
|
|
cat > "$INIT_DB_DIR/03-init-data.sql" << 'EOF'
|
|||
|
|
-- ========================================
|
|||
|
|
-- 校园新闻管理系统 - 初始数据导入脚本
|
|||
|
|
-- 自动生成时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|||
|
|
-- 基于: schoolNewsServ/.bin/mysql/sql/
|
|||
|
|
-- ========================================
|
|||
|
|
|
|||
|
|
USE school_news;
|
|||
|
|
|
|||
|
|
-- 检查是否已执行过此脚本
|
|||
|
|
SET @executed = (SELECT COUNT(*) FROM _db_init_status WHERE script_name = '03-init-data.sql');
|
|||
|
|
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN @executed > 0 THEN '初始数据已存在,跳过导入'
|
|||
|
|
ELSE '开始导入初始数据...'
|
|||
|
|
END AS message;
|
|||
|
|
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
# 合并初始数据文件
|
|||
|
|
log_info "合并初始数据文件..."
|
|||
|
|
DATA_FILES=(
|
|||
|
|
"initMenuData.sql"
|
|||
|
|
"initAllData.sql"
|
|||
|
|
"initCrontabMetaData.sql"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
for file in "${DATA_FILES[@]}"; do
|
|||
|
|
if [ -f "$SQL_SOURCE_DIR/$file" ]; then
|
|||
|
|
echo "" >> "$INIT_DB_DIR/03-init-data.sql"
|
|||
|
|
echo "-- ========================================" >> "$INIT_DB_DIR/03-init-data.sql"
|
|||
|
|
echo "-- $file" >> "$INIT_DB_DIR/03-init-data.sql"
|
|||
|
|
echo "-- ========================================" >> "$INIT_DB_DIR/03-init-data.sql"
|
|||
|
|
cat "$SQL_SOURCE_DIR/$file" >> "$INIT_DB_DIR/03-init-data.sql"
|
|||
|
|
log_info " ✓ $file"
|
|||
|
|
else
|
|||
|
|
log_warn " ✗ $file (文件不存在)"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# 添加爬虫配置初始化
|
|||
|
|
cat >> "$INIT_DB_DIR/03-init-data.sql" << 'EOF'
|
|||
|
|
|
|||
|
|
-- ========================================
|
|||
|
|
-- Docker环境爬虫配置
|
|||
|
|
-- ========================================
|
|||
|
|
INSERT IGNORE INTO tb_sys_config (config_key, config_value, config_desc, created_at)
|
|||
|
|
VALUES
|
|||
|
|
('crawler.pythonPath', '/usr/bin/python3', 'Docker容器内Python路径', NOW()),
|
|||
|
|
('crawler.basePath', '/app/crawler', 'Docker容器内爬虫脚本路径', NOW());
|
|||
|
|
|
|||
|
|
-- 记录执行状态
|
|||
|
|
INSERT IGNORE INTO _db_init_status (script_name)
|
|||
|
|
VALUES ('03-init-data.sql');
|
|||
|
|
|
|||
|
|
SELECT '初始数据导入完成' AS message;
|
|||
|
|
SELECT '默认用户: admin, 密码: admin123' AS tip;
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 生成统计信息
|
|||
|
|
log_info "生成文件统计..."
|
|||
|
|
cat > "$INIT_DB_DIR/00-init-summary.txt" << EOF
|
|||
|
|
========================================
|
|||
|
|
数据库初始化脚本准备完成
|
|||
|
|
========================================
|
|||
|
|
生成时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|||
|
|
源目录: $SQL_SOURCE_DIR
|
|||
|
|
|
|||
|
|
生成的文件:
|
|||
|
|
01-init-database.sql - 数据库创建(已存在)
|
|||
|
|
02-create-tables.sql - 表结构创建
|
|||
|
|
03-init-data.sql - 初始数据导入
|
|||
|
|
|
|||
|
|
执行顺序:
|
|||
|
|
1. 创建数据库和初始化标记表
|
|||
|
|
2. 创建所有业务表
|
|||
|
|
3. 导入初始数据(用户、菜单、系统配置等)
|
|||
|
|
|
|||
|
|
默认账户:
|
|||
|
|
用户名: admin
|
|||
|
|
密码: admin123
|
|||
|
|
角色: 管理员
|
|||
|
|
|
|||
|
|
注意事项:
|
|||
|
|
1. 脚本具有幂等性,可以重复执行
|
|||
|
|
2. 使用 _db_init_status 表跟踪执行状态
|
|||
|
|
3. Docker容器启动时自动执行这些脚本
|
|||
|
|
4. 如需重新初始化,删除数据卷: docker-compose down -v
|
|||
|
|
|
|||
|
|
========================================
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
log_info "========================================"
|
|||
|
|
log_info "准备完成!"
|
|||
|
|
log_info "========================================"
|
|||
|
|
log_info "生成的文件:"
|
|||
|
|
ls -lh "$INIT_DB_DIR"/*.sql 2>/dev/null | awk '{print " " $9 " (" $5 ")"}'
|
|||
|
|
echo ""
|
|||
|
|
log_info "下一步:"
|
|||
|
|
echo " 1. 检查生成的SQL文件"
|
|||
|
|
echo " 2. 运行Docker构建: ./build.sh"
|
|||
|
|
echo " 3. 启动服务: cd docker && docker-compose up -d"
|
|||
|
|
log_info "========================================"
|