#!/usr/bin/env bash # 把本地 parking_cloud 拷贝成 parking_cloud_yudao,并在拷贝里准备上游 system/infra/iot 表。 # 原库 parking_cloud 不会被修改。 set -euo pipefail SRC_DB="${SRC_DB:-parking_cloud}" DST_DB="${DST_DB:-parking_cloud_yudao}" TMPL_DB="${TMPL_DB:-yudao_template}" MYSQL_HOST="${MYSQL_HOST:-127.0.0.1}" MYSQL_PORT="${MYSQL_PORT:-3306}" MYSQL_USER="${MYSQL_USER:-root}" MYSQL_CMD=(mysql -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER") DUMP_CMD=(mysqldump -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER" --single-transaction --set-gtid-purged=OFF) SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" echo "== 1/7 拷贝 $SRC_DB -> $DST_DB" "${MYSQL_CMD[@]}" -e "DROP DATABASE IF EXISTS \`$DST_DB\`; CREATE DATABASE \`$DST_DB\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" "${DUMP_CMD[@]}" --routines --triggers --events "$SRC_DB" | "${MYSQL_CMD[@]}" "$DST_DB" echo "== 2/7 装载上游模板 $TMPL_DB" "${MYSQL_CMD[@]}" -e "DROP DATABASE IF EXISTS \`$TMPL_DB\`; CREATE DATABASE \`$TMPL_DB\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" "${MYSQL_CMD[@]}" "$TMPL_DB" < "$REPO_DIR/sql/mysql/ruoyi-vue-pro.sql" if [ -f "$REPO_DIR/sql/mysql/quartz.sql" ]; then "${MYSQL_CMD[@]}" "$TMPL_DB" < "$REPO_DIR/sql/mysql/quartz.sql" fi echo "== 3/7 拷贝里把 12 张旧 system_* 改名 pcbak_*(system_org 保留)" "${MYSQL_CMD[@]}" "$DST_DB" -e " RENAME TABLE system_dict_data TO pcbak_system_dict_data, system_dict_type TO pcbak_system_dict_type, system_login_log TO pcbak_system_login_log, system_menu TO pcbak_system_menu, system_oauth2_access_token TO pcbak_system_oauth2_access_token, system_oauth2_client TO pcbak_system_oauth2_client, system_oauth2_refresh_token TO pcbak_system_oauth2_refresh_token, system_operate_log TO pcbak_system_operate_log, system_role TO pcbak_system_role, system_role_menu TO pcbak_system_role_menu, system_user_role TO pcbak_system_user_role, system_users TO pcbak_system_users; " echo "== 4/7 从模板导入上游 system/infra/iot/QRTZ 表" TABLES=$("${MYSQL_CMD[@]}" -N -e "SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema='$TMPL_DB' AND (table_name LIKE 'system\\_%' OR table_name LIKE 'infra\\_%' OR table_name LIKE 'iot\\_%' OR table_name LIKE 'QRTZ\\_%');") if [ -z "$TABLES" ]; then echo "ERROR: 模板库里没找到 system/infra/iot 表"; exit 1; fi "${DUMP_CMD[@]}" "$TMPL_DB" $TABLES | "${MYSQL_CMD[@]}" "$DST_DB" echo "== 5/7 管理员密码沿用旧库" "${MYSQL_CMD[@]}" "$DST_DB" -e " UPDATE system_users u JOIN pcbak_system_users o ON o.id = 1 SET u.password = o.password, u.nickname = COALESCE(NULLIF(o.nickname, ''), u.nickname), u.mobile = COALESCE(NULLIF(o.mobile, ''), u.mobile) WHERE u.id = 1; " echo "== 6/7 清理上游演示数据 + 迁移菜单/字典" "${MYSQL_CMD[@]}" "$DST_DB" -e " DELETE FROM system_user_role WHERE user_id <> 1 OR role_id <> 1; DELETE FROM system_role_menu WHERE role_id <> 1; DELETE FROM system_role WHERE id <> 1; DELETE FROM system_users WHERE id <> 1; DELETE FROM system_tenant WHERE id <> 1; " "${MYSQL_CMD[@]}" "$DST_DB" < "$SCRIPT_DIR/migrate-menus.sql" echo "== 7/7 删除模板库" "${MYSQL_CMD[@]}" -e "DROP DATABASE \`$TMPL_DB\`;" echo "== done: $DST_DB" "${MYSQL_CMD[@]}" -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='$DST_DB';" "${MYSQL_CMD[@]}" "$DST_DB" -N -e "SELECT 'menus', COUNT(*) FROM system_menu; SELECT 'users', COUNT(*) FROM system_users; SELECT 'dict_types', COUNT(*) FROM system_dict_type;"