cat > rollback_db_to_3.76.sh << 'EOF'
#!/bin/bash
# 自动将 Nexus H2 数据库回滚到 flyway_schema_history 版本 2.10(无需确认)
# 用法: ./rollback_db_to_3.76.sh <db_path> <h2_jar_path>
# 示例: ./rollback_db_to_3.76.sh ./nexus ./h2.jar
set -e
# 检查是否提供了必要参数
if [ $# -ne 2 ]; then
echo "用法: $0 <db_path> <h2_jar_path>"
echo "示例: $0 ./nexus ./h2.jar"
echo ""
echo "参数说明:"
echo " db_path - H2 数据库路径(不含 .mv.db 扩展名)"
echo " h2_jar_path - H2 JAR 文件路径"
exit 1
fi
DB_PATH="$1"
H2_JAR="$2"
# 验证 H2 JAR 文件是否存在
if [ ! -f "$H2_JAR" ]; then
echo "错误: 未找到 H2 JAR 文件: $H2_JAR"
exit 1
fi
# 验证数据库文件是否存在
if [ ! -f "${DB_PATH}.mv.db" ]; then
echo "错误: 未找到数据库文件: ${DB_PATH}.mv.db"
exit 1
fi
echo "================================"
echo "开始回滚到版本 2.10"
echo "================================"
echo "数据库文件: ${DB_PATH}.mv.db"
echo "H2 JAR 文件: $H2_JAR"
echo ""
# 备份数据库文件
cp "${DB_PATH}.mv.db" "${DB_PATH}.mv.db.backup-$(date +%Y%m%d%H%M%S)"
echo "已创建备份: ${DB_PATH}.mv.db.backup-*"
# 1. 检查当前版本
echo "当前版本:"
java -cp "$H2_JAR" org.h2.tools.Shell -url "jdbc:h2:$DB_PATH" -user "" -password "" -sql 'SELECT "version", "description" FROM "flyway_schema_history" WHERE "version" IS NOT NULL ORDER BY "installed_rank" DESC LIMIT 1;'
# 2. 统计将被删除的记录数
echo ""
echo "将删除的迁移记录(installed_rank > 49):"
RECORDS_COUNT=$(java -cp "$H2_JAR" org.h2.tools.Shell -url "jdbc:h2:$DB_PATH" -user "" -password "" -sql 'SELECT COUNT(*) FROM "flyway_schema_history" WHERE "installed_rank" > 49;' | grep -E "^[0-9]+$" | head -1)
echo "待删除记录总数: $RECORDS_COUNT"
# 3. 显示将被删除的详细记录
echo ""
echo "详细记录:"
java -cp "$H2_JAR" org.h2.tools.Shell -url "jdbc:h2:$DB_PATH" -user "" -password "" -sql 'SELECT "installed_rank", "version", "description" FROM "flyway_schema_history" WHERE "installed_rank" > 49 ORDER BY "installed_rank" ASC;'
# 4. 执行删除操作
echo ""
echo "正在删除记录..."
java -cp "$H2_JAR" org.h2.tools.Shell -url "jdbc:h2:$DB_PATH" -user "" -password "" -sql 'DELETE FROM "flyway_schema_history" WHERE "installed_rank" > 49;'
# 5. 验证结果
echo ""
echo "================================"
echo "回滚完成!"
echo "================================"
echo ""
echo "当前版本:"
java -cp "$H2_JAR" org.h2.tools.Shell -url "jdbc:h2:$DB_PATH" -user "" -password "" -sql 'SELECT "version", "description", "installed_on" FROM "flyway_schema_history" WHERE "version" IS NOT NULL ORDER BY "installed_rank" DESC LIMIT 1;'
echo ""
echo "剩余迁移记录数:"
java -cp "$H2_JAR" org.h2.tools.Shell -url "jdbc:h2:$DB_PATH" -user "" -password "" -sql 'SELECT COUNT(*) as total_records FROM "flyway_schema_history";'
echo ""
echo "================================"
echo "重要提示:"
echo "1. ✅ flyway_schema_history 表已回滚至 2.10"
echo "2. ⚠️ 请确保将回滚后的数据库文件恢复到您的 Nexus 3.76 实例中。"
echo "================================"
EOF
chmod +x rollback_db_to_3.76.sh
./rollback_db_to_3.76.sh /tmp/nexus-restore/nexus ./h2.jar
mkdir -p /tmp/nexus-restore/rolledback
cp /tmp/nexus-restore/nexus.mv.db /tmp/nexus-restore/rolledback/nexus.mv.db