#!/bin/bash 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 "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 MySQL 连接 check_mysql() { local mysql_host="${MYSQL_HOST:-localhost}" local mysql_port="${MYSQL_PORT:-3306}" local mysql_user="${MYSQL_USER:-root}" local mysql_password="${MYSQL_PASSWORD:-Prison2024!@}" log_info "检查 MySQL 连接..." if ! docker exec xlcp-mysql mysqladmin ping -h "$mysql_host" -P "$mysql_port" -u "$mysql_user" -p"$mysql_password" 2>/dev/null; then log_error "无法连接到 MySQL" exit 1 fi log_success "MySQL 连接正常" } # 初始化数据库 init_database() { log_info "初始化数据库..." docker exec -i xlcp-mysql mysql -u root -p"${MYSQL_PASSWORD:-Prison2024!@}" prison < ./sql/prison_schema.sql || { log_error "数据库初始化失败" exit 1 } log_success "数据库初始化完成" } # 验证数据库 verify_database() { log_info "验证数据库表结构..." local table_count=$(docker exec xlcp-mysql mysql -u root -p"${MYSQL_PASSWORD:-Prison2024!@}" prison -e "SHOW TABLES;" 2>/dev/null | wc -l) if [ "$table_count" -lt 10 ]; then log_error "数据库表数量异常: $table_count" exit 1 fi log_success "数据库验证通过 (共 $table_count 张表)" } # 主函数 main() { log_info "=========================================" log_info "XL监狱综合管理平台 - 数据库初始化" log_info "=========================================" # 切换到脚本所在目录的上级目录(deploy 目录) cd "$(dirname "$0")/.." # 检查 MySQL check_mysql # 初始化数据库 read -p "是否初始化数据库? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then init_database fi # 验证数据库 verify_database log_success "=========================================" log_success "数据库初始化完成!" log_success "=========================================" } main "$@"