| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #!/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 "数据库初始化完成"
- echo ""
- echo ""
|