← ClaudeAtlas

migration-helperlisted

【数据迁移】设计和执行数据迁移方案,包含迁移脚本生成、数据校验、回滚策略、灰度迁移计划。 触发时机: - 数据库表结构变更需要迁移 - 系统重构需要数据迁移 - 数据库切换(MySQL→PostgreSQL) - 用户要求"数据迁移"、"表结构变更" 支持 DDL 生成、数据迁移脚本、校验脚本。
afine907/skills · ★ 0 · API & Backend · score 75
Install: claude install-skill afine907/skills
# Migration Helper — 数据迁移助手 设计安全的数据迁移方案,生成迁移脚本和校验逻辑。 ## Goal 设计和执行数据迁移方案,包含迁移脚本生成、数据校验、回滚策略、灰度迁移计划 ## Trigger - 数据库表结构变更需要迁移 - 系统重构需要数据迁移 - 数据库切换(MySQL→PostgreSQL) - 用户要求"数据迁移"、"表结构变更" ## 工作流程 ``` 变更分析 → 方案设计 → 脚本生成 → 校验逻辑 → 回滚方案 → 执行计划 ``` ## 迁移类型 | 类型 | 场景 | 风险 | 停机要求 | |------|------|------|----------| | DDL 变更 | 加字段、加索引 | 低 | 通常不需要 | | 数据回填 | 填充新字段默认值 | 中 | 不需要 | | 数据拆分 | 表拆分、分库分表 | 高 | 可能需要 | | 数据合并 | 多表合并 | 高 | 可能需要 | | 数据库切换 | MySQL→PostgreSQL | 极高 | 需要 | ## DDL 变更最佳实践 ### 安全的 DDL 操作 ```sql -- ✅ 安全:加字段(带默认值) ALTER TABLE users ADD COLUMN status TINYINT NOT NULL DEFAULT 0 COMMENT '用户状态: 0-正常, 1-禁用'; -- ✅ 安全:加索引(使用 CONCURRENTLY 避免锁表) -- PostgreSQL CREATE INDEX CONCURRENTLY idx_users_email ON users(email); -- MySQL 8.0+ ALTER TABLE users ADD INDEX idx_users_email (email), ALGORITHM=INPLACE, LOCK=NONE; -- ✅ 安全:加约束(先验证数据) -- 1. 先检查是否有违反约束的数据 SELECT COUNT(*) FROM users WHERE email IS NULL; -- 2. 修复违规数据 UPDATE users SET email = CONCAT('unknown_', id) WHERE email IS NULL; -- 3. 再加约束 ALTER TABLE users MODIFY COLUMN email VARCHAR(255) NOT NULL; ``` ### 危险的 DDL 操作 ```sql -- ❌ 危险:直接改列类型(可能丢数据) ALTER TABLE users MODIFY COLUMN name VARCHAR(50); -- ✅ 安全方式: -- 1. 加新列 ALTER TABLE users ADD COLUMN name_new VARCHAR(50); -- 2. 迁移数据 UPDATE users SET name_new = LEFT(name, 50); -- 3. 切换列名 ALTER TABLE users DROP COLUMN name; ALTER TABLE users CHANGE COLUMN name_new name VARCHAR(50); ``` ## 迁移脚本模