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 "========================================"
|