数据库迁移风险分析工具

MCP Migration Advisor 是一款数据库迁移风险分析工具,用于检测Flyway和Liquibase迁移中的危险模式变更,包括锁风险、数据丢失模式和冲突检测,适用于多种数据库类型。

  • by Dmitriusan
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Dmitriusan/mcp-migration-advisor

使用说明

MCP迁移顾问

用于数据库迁移风险分析的MCP服务器。在危险的架构更改投入生产之前检测它们。

为什么是这个工具?

数据库迁移失败会导致中断。此工具分析您的Flyway和Liquibase迁移 之前 它们运行——检测破坏性操作、锁定风险和数据丢失模式。

与MigrationPilot(仅PG,原始SQL分析)不同,此工具 本机解析Liquibase XML和YAML变更日志 --提取changeSet,检测changeSet ID之间的冲突,并验证回滚的完整性。它跨数据库类型工作,而不仅仅是PostgreSQL。

特性

  • 锁风险分析:检测获取重表锁(ACCESS EXCLUSIVE、SHARE锁)的DDL操作
  • 数据丢失检测:查找列删除、截断的类型更改、不带WHERE的truncate/DELETE
  • 风险评分:根据检测到的问题的严重程度计算0-100的风险评分
  • Flyway支持:解析V__.sql和R__.sql迁移文件名
  • Liquibase支持:使用changeSet提取解析XML和YAML变更日志
  • 冲突检测:识别重复的changeSet ID和订购问题
  • 回滚验证:检查每个changeSet的回滚完整性
  • 可操作建议:每种风险都包括一种特定的安全替代方案

专业级别

生成可导出的诊断报告(HTML+PDF) 使用Pro许可证密钥。

  • 完整的JVM线程转储分析报告,其中包含可操作的建议
  • PDF导出以与您的团队共享
  • 优先支持

9.00美元/月 — 获取专业版许可证

Pro许可证密钥激活 generate_report MCP-jvm诊断中的MCP工具。

安装

npx mcp-migration-advisor

或全局安装:

npm install -g mcp-migration-advisor

Claude桌面配置

添加 ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "migration-advisor": {
      "command": "npx",
      "args": ["-y", "mcp-migration-advisor"]
    }
  }
}

快速演示

在Claude中尝试以下提示:

  1. “分析此迁移的风险:ALTER TABLE用户删除COLUMN电子邮件;” --返回风险评分(0-100)、锁定风险、数据丢失警告和安全替代方案
  2. “为此迁移生成回滚:创建TABLE订单(…);创建索引idx_orders_user ON订单(user_id);” --按正确顺序生成反向DDL
  3. “对Liquibase更改日志进行评分:[粘贴XML]” --分析变更集并计算总体风险

工具

analyze_migration

SQL迁移文件的完整分析。返回锁定风险、数据丢失分析和建议。

参数:

  • filename --迁移文件名(例如。, V2__add_user_email.sql)
  • sql --SQL内容

analyze_liquibase

Liquibase XML变更日志的完整分析。解析changeSet并应用相同的锁风险和数据丢失分析。

参数:

  • xml --Liquibase XML更改日志内容

analyze_liquibase_yaml

Liquibase YAML变更日志的完整分析。从YAML格式解析changeSet,并应用相同的锁风险和数据丢失分析。支持所有标准更改类型:createTable、dropTable、addColumn、dropColumn、modifyDataType、createIndex、renameTable、renameColumn等。

参数:

  • yaml --Liquibase YAML更改日志内容

score_risk

快速风险评分(0-100),并附有判断(低/中/高风险)。

参数:

  • filename --迁移文件名
  • sql --SQL内容

generate_rollback

生成反向DDL以撤消SQL迁移。生成回滚SQL,并对不可逆操作发出警告。

参数:

  • filename --迁移文件名
  • sql --SQL内容

自动反转:

  • 创建表→ 删除表
  • 添加列→ 改变桌子。..落柱
  • 创建索引→ DROP索引(同时保留)
  • 添加约束→ 跌落约束
  • 设置为非空→ 不为空
  • 重命名→ 反向重命名

警告不可逆转:

  • DROP TABLE,DROP COLUMN(数据丢失)
  • 列类型更改(原始类型未知)
  • DROP索引、DROP约束(原始定义未知)

包括Flyway schema_history 清理声明。

detect_conflicts

检测两个SQL迁移文件之间的冲突。识别相同的表修改、相同的列更改、锁争用风险和删除依赖关系,如果同时应用或以错误的顺序应用,这些依赖关系可能会导致失败。

参数:

  • filename_a --第一迁移文件名(例如。, V3__add_email.sql)
  • sql_a --第一次迁移的SQL内容
  • filename_b --第二迁移文件名(例如。, V4__modify_users.sql)
  • sql_b --第二次迁移的SQL内容

检测:

  • 同一列冲突 (关键)--两次迁移都会修改同一表上的同一列
  • 删除依赖关系 (关键)--一次迁移会删除另一次迁移所修改的表,从而导致顺序相关的失败
  • 锁争用 (警告)--两次迁移都需要在同一个表上使用独占锁,这可能会导致锁等待超时

返回一个冲突报告,其中包含严重性级别、受影响的表/列以及迁移是否可以安全地并发运行。

它检测到什么

模式 严重性 为什么它是危险的
不带DEFAULT的NOT NULL 关键 使用ACCESS独占锁重写全表
列类型更改 关键 表重写,数据截断风险
CREATE INDEX(非并发) 高 共享锁阻止所有写入
DROP TABLE CASCADE CRITICAL 删除所有依赖对象
DROP COLUMN HIGH 不可逆的数据丢失
设置NOT NULL HIGH 带锁的全表扫描
外键约束 MEDIUM 锁定两个表以进行验证
TRUNCATE/DELETE without WHERE 某些数据丢失 所有行永久删除

限制和已知问题

  • 仅进行静态分析:在没有数据库连接的情况下分析SQL文本。无法检查实际表大小、行数或现有架构以校准风险。
  • 以PostgreSQL为中心:锁定风险建议主要针对PostgreSQL。MySQL和SQLite的锁行为不同,可能没有完全涵盖。
  • 复杂DDL:迁移中的存储过程、触发器和动态SQL被归类为“其他”,并接受通用风险评估。
  • Liquibase支持:处理标准XML和YAML变更集。JSON Liquibase格式和自定义更改类型不受支持。
  • 回滚限制:自动生成的回滚无法反转DROP TABLE、DROP COLUMN或类型更改(数据丢失)。这些会产生警告,而不是回滚SQL。
  • 多对账单交易:解析器按分号拆分。字符串或美元引号内包含分号的语句可能会被错误拆分。
  • 不执行:顾问分析但从不执行迁移。所有建议都是咨询性的。
  • 特定于数据库的DDL:解析器针对PostgreSQL/MySQL DDL语法。Oracle PL/SQL或SQL Server T-SQL可能无法完全识别。

MCP Java后端套件的一部分

许可证

麻省理工学院


生命终结:2026-05-10。

此MCP服务器不再维护或分发。公司 已经转向Apify市场参与者。看 irrationalways 关于Apify 和 irrcorp/bzp-poland-tenders 对于当前的公司工作。

npm包尚未发布。存储库已存档 仅供历史参考。