tool-import-sql.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #!/bin/bash
  2. # MySQL数据库初始化脚本
  3. # 用于创建基础数据库并导入表结构
  4. # 显示使用说明
  5. show_usage() {
  6. echo "用法: $0 [选项]"
  7. echo "选项:"
  8. echo " -h, --host HOST MySQL 主机地址 (默认: bm_mysql)"
  9. echo " -P, --port PORT MySQL 端口 (默认: 3306)"
  10. echo " -u, --user USER MySQL 用户名 (默认: root)"
  11. echo " -p, --password PASS MySQL 密码 (默认: 空)"
  12. echo " -d, --database DB 数据库名称 (默认: bm_center)"
  13. echo " -f, --file FILE SQL 文件路径 (默认: /workspace/db/center/merged.sql)"
  14. echo " --help 显示此帮助信息"
  15. echo ""
  16. echo "示例:"
  17. echo " $0 -h localhost -d mydb -f /path/to/sql/file.sql"
  18. echo " $0 --file /workspace/db/sub/merged.sql"
  19. }
  20. # 默认配置
  21. DB_HOST="bm_mysql"
  22. DB_PORT="3306"
  23. DB_USER="root"
  24. DB_PASSWORD=""
  25. DB_NAME="bm_center"
  26. SQL_FILE="/workspace/db/center/merged.sql"
  27. # 解析命令行参数
  28. while [[ $# -gt 0 ]]; do
  29. case $1 in
  30. -h | --host)
  31. DB_HOST="$2"
  32. shift 2
  33. ;;
  34. -P | --port)
  35. DB_PORT="$2"
  36. shift 2
  37. ;;
  38. -u | --user)
  39. DB_USER="$2"
  40. shift 2
  41. ;;
  42. -p | --password)
  43. DB_PASSWORD="$2"
  44. shift 2
  45. ;;
  46. -d | --database)
  47. DB_NAME="$2"
  48. shift 2
  49. ;;
  50. -f | --file)
  51. SQL_FILE="$2"
  52. shift 2
  53. ;;
  54. --help)
  55. show_usage
  56. exit 0
  57. ;;
  58. *)
  59. echo "错误: 未知参数 '$1'"
  60. show_usage
  61. exit 1
  62. ;;
  63. esac
  64. done
  65. echo ""
  66. echo "- - = 开始初始化数据库 = - -"
  67. echo ""
  68. echo " 主机: ${DB_HOST}"
  69. echo " 数据库: ${DB_NAME}"
  70. echo " SQL文件: ${SQL_FILE}"
  71. echo ""
  72. # 检查 MySQL 客户端是否可用
  73. if ! command -v mysql &>/dev/null; then
  74. echo "错误:MySQL 客户端未安装,请先运行 setup-mysql-cli.sh"
  75. exit 1
  76. fi
  77. # 检查 SQL 文件是否存在
  78. if [ ! -f "${SQL_FILE}" ]; then
  79. echo "错误:SQL 文件不存在: ${SQL_FILE}"
  80. echo "请先运行 'make m' 生成 merged.sql 文件"
  81. exit 1
  82. fi
  83. # 构建 MySQL 连接命令
  84. MYSQL_CMD="mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --skip-ssl"
  85. if [ -n "${DB_PASSWORD}" ]; then
  86. MYSQL_CMD="${MYSQL_CMD} -p${DB_PASSWORD}"
  87. fi
  88. # 测试 MySQL 连接
  89. if ! ${MYSQL_CMD} -e "SELECT 1;" &>/dev/null; then
  90. echo "错误:无法连接到 MySQL 服务器"
  91. echo "请检查 MySQL 服务是否运行,以及连接参数是否正确"
  92. echo "主机: ${DB_HOST}, 端口: ${DB_PORT}, 用户: ${DB_USER}"
  93. exit 1
  94. fi
  95. # 检查数据库是否已存在
  96. echo "检查数据库 ${DB_NAME} 是否存在..."
  97. if ${MYSQL_CMD} -e "USE ${DB_NAME};" &>/dev/null; then
  98. echo "警告:数据库 ${DB_NAME} 已存在"
  99. read -p "是否删除并重新创建数据库?(y/N): " -n 1 -r
  100. echo
  101. if [[ ! ${REPLY} =~ ^[Yy]$ ]]; then
  102. echo "操作已取消"
  103. exit 0
  104. fi
  105. # 删除现有数据库
  106. echo "删除现有数据库 ${DB_NAME}..."
  107. if ! ${MYSQL_CMD} -e "DROP DATABASE ${DB_NAME};" &>/dev/null; then
  108. echo "错误:删除数据库失败"
  109. exit 1
  110. fi
  111. fi
  112. # 创建数据库
  113. echo "创建数据库 ${DB_NAME}..."
  114. if ! ${MYSQL_CMD} -e "CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" &>/dev/null; then
  115. echo "错误:创建数据库失败"
  116. exit 1
  117. fi
  118. echo "数据库创建成功"
  119. echo ""
  120. # 导入 SQL 文件
  121. echo "导入表结构文件: ${SQL_FILE}"
  122. if ! ${MYSQL_CMD} "${DB_NAME}" <"${SQL_FILE}"; then
  123. echo "错误:导入 SQL 文件失败"
  124. exit 1
  125. fi
  126. echo "SQL 文件导入成功"
  127. echo ""
  128. # 验证导入结果
  129. echo "验证导入结果..."
  130. TABLE_COUNT=$(${MYSQL_CMD} "${DB_NAME}" -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '${DB_NAME}';" 2>/dev/null)
  131. if [ -n "${TABLE_COUNT}" ] && [ "${TABLE_COUNT}" -gt 0 ]; then
  132. echo "✅ 数据库初始化完成"
  133. echo " 数据库名: ${DB_NAME}"
  134. echo " 表数量: ${TABLE_COUNT}"
  135. echo " 包含的表:"
  136. ${MYSQL_CMD} "${DB_NAME}" -e "SHOW TABLES;" 2>/dev/null
  137. else
  138. echo "警告:未检测到导入的表"
  139. fi
  140. echo ""
  141. echo "使用说明:"
  142. echo " 连接数据库: mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p ${DB_NAME}"
  143. echo " 查看表结构: SHOW TABLES;"
  144. echo " 查看表详情: DESCRIBE table_name;"
  145. echo ""
  146. echo "数据库初始化完成"
  147. echo ""
  148. echo ""