#!/bin/bash # MySQL数据库初始化脚本 # 用于创建基础数据库并导入表结构 # 显示使用说明 show_usage() { echo "用法: $0 [选项]" echo "选项:" echo " -h, --host HOST MySQL主机地址 (默认: bm_mysql)" echo " -P, --port PORT MySQL端口 (默认: 3306)" echo " -u, --user USER MySQL用户名 (默认: root)" echo " -p, --password PASS MySQL密码 (默认: 空)" echo " -d, --database DB 数据库名称 (默认: bm_center)" echo " -f, --file FILE SQL文件路径 (默认: /workspace/db/center/merged.sql)" echo " --help 显示此帮助信息" echo "" echo "示例:" echo " $0 -h localhost -d mydb -f /path/to/sql/file.sql" echo " $0 --file /workspace/db/sub/merged.sql" } # 默认配置 DB_HOST="bm_mysql" DB_PORT="3306" DB_USER="root" DB_PASSWORD="" DB_NAME="bm_center" SQL_FILE="/workspace/db/center/merged.sql" # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in -h | --host) DB_HOST="$2" shift 2 ;; -P | --port) DB_PORT="$2" shift 2 ;; -u | --user) DB_USER="$2" shift 2 ;; -p | --password) DB_PASSWORD="$2" shift 2 ;; -d | --database) DB_NAME="$2" shift 2 ;; -f | --file) SQL_FILE="$2" shift 2 ;; --help) show_usage exit 0 ;; *) echo "错误: 未知参数 '$1'" show_usage exit 1 ;; esac done echo "" echo "- - = 开始初始化数据库 = - -" echo "" echo " 主机: ${DB_HOST}" echo " 数据库: ${DB_NAME}" echo " SQL文件: ${SQL_FILE}" echo "" # 检查MySQL客户端是否可用 if ! command -v mysql &>/dev/null; then echo "错误:MySQL客户端未安装,请先运行 setup-mysql-cli.sh" exit 1 fi # 检查SQL文件是否存在 if [ ! -f "${SQL_FILE}" ]; then echo "错误:SQL文件不存在: ${SQL_FILE}" echo "请先运行 'make m' 生成merged.sql文件" exit 1 fi # 构建MySQL连接命令 MYSQL_CMD="mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --skip-ssl" if [ -n "${DB_PASSWORD}" ]; then MYSQL_CMD="${MYSQL_CMD} -p${DB_PASSWORD}" fi # 测试MySQL连接 if ! ${MYSQL_CMD} -e "SELECT 1;" &>/dev/null; then echo "错误:无法连接到MySQL服务器" echo "请检查MySQL服务是否运行,以及连接参数是否正确" echo "主机: ${DB_HOST}, 端口: ${DB_PORT}, 用户: ${DB_USER}" exit 1 fi # 检查数据库是否已存在 echo "检查数据库 ${DB_NAME} 是否存在..." if ${MYSQL_CMD} -e "USE ${DB_NAME};" &>/dev/null; then echo "警告:数据库 ${DB_NAME} 已存在" read -p "是否删除并重新创建数据库?(y/N): " -n 1 -r echo if [[ ! ${REPLY} =~ ^[Yy]$ ]]; then echo "操作已取消" exit 0 fi # 删除现有数据库 echo "删除现有数据库 ${DB_NAME}..." if ! ${MYSQL_CMD} -e "DROP DATABASE ${DB_NAME};" &>/dev/null; then echo "错误:删除数据库失败" exit 1 fi fi # 创建数据库 echo "创建数据库 ${DB_NAME}..." if ! ${MYSQL_CMD} -e "CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" &>/dev/null; then echo "错误:创建数据库失败" exit 1 fi echo "数据库创建成功" echo "" # 导入SQL文件 echo "导入表结构文件: ${SQL_FILE}" if ! ${MYSQL_CMD} "${DB_NAME}" <"${SQL_FILE}"; then echo "错误:导入SQL文件失败" exit 1 fi echo "SQL文件导入成功" echo "" # 验证导入结果 echo "验证导入结果..." TABLE_COUNT=$(${MYSQL_CMD} "${DB_NAME}" -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '${DB_NAME}';" 2>/dev/null) if [ -n "${TABLE_COUNT}" ] && [ "${TABLE_COUNT}" -gt 0 ]; then echo "✅ 数据库初始化完成" echo " 数据库名: ${DB_NAME}" echo " 表数量: ${TABLE_COUNT}" echo " 包含的表:" ${MYSQL_CMD} "${DB_NAME}" -e "SHOW TABLES;" 2>/dev/null else echo "警告:未检测到导入的表" fi echo "" echo "使用说明:" echo " 连接数据库: mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p ${DB_NAME}" echo " 查看表结构: SHOW TABLES;" echo " 查看表详情: DESCRIBE table_name;" echo "" echo "mb_center数据库初始化完成" echo "" echo ""