21 KiB
21 KiB
Implementation Plan: Database Migration
Overview
本任务清单将 MySQL 5.7 到 SQL Server 2022 的数据库迁移分解为可执行的编码任务。每个任务都是增量式的,确保迁移过程可控、可验证。
当前状态
- SQL Server 数据库: honey_box 已创建,38个表结构已完成
- MySQL 源数据库: youdas,包含 82 个表,核心业务数据完整
- 数据迁移进度: 部分完成,详见下方任务状态
迁移进度摘要
| 表名 | MySQL记录数 | SQL Server记录数 | 状态 |
|---|---|---|---|
| users | 2,202 | 2,202 | ✅ 完成 |
| user_accounts | 3,452 | 3,452 | ✅ 完成 |
| user_login_logs | 11,584 | 11,584 | ✅ 完成 |
| user_addresses | 51 | 51 | ✅ 完成 |
| goods | 503 | 0 | 未迁移 |
| goods_items | 1,852 | 1,852 | ✅ 完成 |
| goods_types | 13 | 0 | 未迁移 |
| goods_extensions | 34 | 0 | 未迁移 |
| prize_levels | 106 | 106 | ✅ 完成 |
| orders | 15 | 15 | ✅ 完成 |
| order_items | 67 | 67 | ✅ 完成 |
| order_items_recovery | 8 | 8 | ✅ 完成 |
| order_items_send | 0 | 0 | ✅ 完成 |
| profit_money | 26,061 | 1,150 | 部分迁移 |
| profit_integral | 33,487 | 0 | 未迁移 |
| profit_money2 | 19,491 | 0 | 未迁移 |
| profit_pay | 3,310 | 0 | 未迁移 |
| profit_score | 0 | 0 | ✅ 完成 |
| profit_ou_qi | 8,355 | 0 | 未迁移 |
| coupons | 19 | 0 | 未迁移 |
| coupon_receives | 7,799 | 7,799 | ✅ 完成 |
| user_coupons | 0 | 0 | ✅ 完成 |
| diamond_products | 5 | 0 | 未迁移 |
| diamond_orders | 398 | 0 | 未迁移 |
| tasks | 9 | 0 | 未迁移 |
| user_tasks | 4,899 | 0 | 未迁移 |
| sign_configs | 35 | 0 | 未迁移 |
| user_signs | 702 | 0 | 未迁移 |
| vip_levels | 75 | 0 | 未迁移 |
| vip_level_rewards | 225 | 0 | 未迁移 |
| user_vip_rewards | 1,393 | 0 | 未迁移 |
| configs | 25 | 0 | 未迁移 |
| deliveries | 11 | 0 | 未迁移 |
| pictures | 1,175 | 0 | 未迁移 |
| adverts | 16 | 0 | 未迁移 |
| admins | 3 | 0 | 未迁移 |
Tasks
-
1. SQL Server 环境搭建和数据库创建
- honey_box 数据库已创建
- 需要配置数据库参数(恢复模式、统计信息、排序规则)
- 需要创建应用程序用户和权限
- Requirements: 阶段2环境搭建
-
2. 用户系统表结构创建
- 2.1 创建 users 表
- 包含所有用户字段(24个字段),使用 snake_case 命名
- 创建主键、唯一约束(open_id, uid)、索引
- 源表: user (2,201条记录)
- Requirements: 1.1
- 2.2 创建 user_accounts 表
- 存储用户账户令牌信息(12个字段)
- 创建索引(user_id, account_token)
- 源表: user_account (3,452条记录)
- Requirements: 1.2
- 2.3 创建 user_login_logs 表
- 记录用户登录日志(7个字段)
- 创建索引(user_id, login_time, platform)
- 源表: user_login_log (11,407条记录)
- Requirements: 1.3
- 2.4 创建 user_addresses 表
- 存储用户收货地址
- 源表: user_address (51条记录)
- Requirements: 1.4
- 2.5 编写用户表结构验证脚本
- Property 1: 表结构完整性
- Validates: Requirements 1.1, 1.2, 1.3, 1.4
- 2.1 创建 users 表
-
3. 商品系统表结构创建
- 3.1 创建 goods 表
- 包含完整 54 个字段
- 包含福利屋、限购、特殊功能字段
- 源表: goods (503条记录)
- Requirements: 2.1
- 3.2 创建 goods_items 表
- 存储商品奖品列表
- 源表: goods_list (1,844条记录)
- Requirements: 2.2
- 3.3 创建 goods_types 表
- 存储商品类型配置
- 源表: goods_type (13条记录)
- Requirements: 2.3
- 3.4 创建 goods_extensions 表
- 存储商品扩展配置
- 源表: goods_extend (34条记录)
- Requirements: 2.4
- 3.5 创建 prize_levels 表
- 存储奖品等级配置
- 源表: shang (106条记录)
- Requirements: 2.5
- 3.6 编写商品表结构验证脚本
- Property 1: 表结构完整性
- Validates: Requirements 2.1, 2.2, 2.3, 2.4, 2.5
- 3.1 创建 goods 表
-
4. 订单系统表结构创建
- 4.1 创建 orders 表
- 包含完整 33 个字段
- 包含支付方式组合字段
- 源表: order (15条记录)
- Requirements: 3.1
- 4.2 创建 order_items 表
- 存储订单详情/抽奖结果
- 源表: order_list (67条记录)
- Requirements: 3.2
- 4.3 创建 order_items_recovery 表
- 存储回收的奖品记录
- 源表: order_list_recovery (8条记录)
- Requirements: 3.3
- 4.4 创建 order_items_send 表
- 存储发货记录
- 源表: order_list_send (0条记录)
- Requirements: 3.4
- 4.5 编写订单表结构验证脚本
- Property 1: 表结构完整性
- Validates: Requirements 3.1, 3.2, 3.3, 3.4
- 4.1 创建 orders 表
-
5. 财务系统表结构创建
- 5.1 创建 profit_money 表
- 记录余额变动明细
- 源表: profit_money (26,061条记录)
- Requirements: 4.1
- 5.2 创建 profit_integral 表
- 记录积分变动明细
- 源表: profit_integral (33,487条记录)
- Requirements: 4.2
- 5.3 创建 profit_money2 表
- 记录积分2变动明细
- 源表: profit_money2 (19,491条记录)
- Requirements: 4.3
- 5.4 创建 profit_pay 表
- 记录支付流水
- 源表: profit_pay (3,310条记录)
- Requirements: 4.4
- 5.5 创建 profit_score 和 profit_ou_qi 表
- 记录评分和欧气值变动
- 源表: profit_score (0条), profit_ou_qi (8,355条)
- Requirements: 4.5, 4.6
- 5.1 创建 profit_money 表
-
6. 优惠券和钻石系统表结构创建
- 6.1 创建 coupons 表
- 存储优惠券模板
- 源表: coupon (19条记录)
- Requirements: 5.1
- 6.2 创建 coupon_receives 表
- 存储用户领取的优惠券
- 源表: coupon_receive (7,846条记录)
- Requirements: 5.2
- 6.3 创建 user_coupons 表
- 存储欧气券
- 源表: user_coupon (0条记录)
- Requirements: 5.3
- 6.4 创建 diamond_products 表
- 存储钻石商品配置
- 源表: diamond_products (5条记录)
- Requirements: 6.1
- 6.5 创建 diamond_orders 表
- 存储钻石订单记录
- 源表: diamond_orders (398条记录)
- Requirements: 6.2
- 6.1 创建 coupons 表
-
7. 任务、签到和VIP系统表结构创建
- 7.1 创建 tasks 和 user_tasks 表
- 存储任务配置和用户任务记录
- 源表: task_list (9条), user_task_list (4,899条)
- Requirements: 7.1, 7.2
- 7.2 创建 sign_configs 和 user_signs 表
- 存储签到配置和用户签到记录
- 源表: sign_config (35条), user_sign (702条)
- Requirements: 7.3, 7.4
- 7.3 创建 vip_levels 和 vip_level_rewards 表
- 存储VIP等级配置和奖品
- 源表: quan_yi_level (75条), quan_yi_level_jiang (225条)
- Requirements: 8.1, 8.2
- 7.4 创建 user_vip_rewards 表
- 存储用户领取的VIP奖品
- 源表: user_quan_yi_level_jiang (1,393条)
- Requirements: 8.3
- 7.1 创建 tasks 和 user_tasks 表
-
8. 系统配置和管理后台表结构创建
- 8.1 创建 configs 表
- 存储系统配置
- 源表: config (25条记录)
- Requirements: 9.1
- 8.2 创建 deliveries 和 pictures 表
- 存储快递公司和图片管理
- 源表: delivery (11条), picture (1,175条)
- Requirements: 9.2, 9.3
- 8.3 创建 adverts 表
- 存储广告配置
- 源表: advert (16条记录)
- Requirements: 9.4
- 8.4 创建 admins 和管理日志表
- 存储管理员信息和日志(仅结构)
- 源表: admin (3条), admin_login_log (398条), admin_operation_log (94,986条)
- Requirements: 10.1, 10.2, 10.3
- 8.1 创建 configs 表
-
9. Checkpoint - 表结构创建验证
- 验证所有表是否正确创建
- 验证索引和约束是否正确
- 确保所有测试通过,如有问题请询问用户
-
[-] 10. 用户数据迁移
- 10.1 完成 users 数据迁移
- 当前状态: 2,202/2,202 条记录已迁移 ✅
- 编写 Node.js 脚本
server/C#/scripts/migrate_users.js - 使用 mysql2 连接 MySQL,查询 user 表数据
- 使用 mssql 连接 SQL Server,插入到 users 表
- 处理时间戳转换(Unix时间戳 → DATETIME2)
- 支持增量迁移(跳过已存在的记录)
- 数据库配置参考: .kiro\settings\mcp.json
- Requirements: 1.5, 1.6
- 10.2 完成 user_accounts 数据迁移
- 当前状态: 590/3,452 条记录已迁移
- 编写 Node.js 脚本
server/C#/scripts/migrate_user_accounts.js - 从 MySQL user_account 查询数据
- 转换并插入到 SQL Server user_accounts 表
- 支持增量迁移
- Requirements: 1.5
- 10.3 迁移 user_login_logs 数据
- 当前状态: 0/11,407 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_user_login_logs.js - 从 MySQL user_login_log 查询数据
- 转换并插入到 SQL Server user_login_logs 表
- 处理时间戳转换
- Requirements: 1.5
- 10.4 迁移 user_addresses 数据
- 当前状态: 0/51 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_user_addresses.js - 从 MySQL user_address 查询数据
- 转换并插入到 SQL Server user_addresses 表
- Requirements: 1.5
- 10.5 编写用户数据验证脚本
- 编写 Node.js 脚本
server/C#/scripts/validate_user_migration.js - 对比 MySQL 和 SQL Server 的记录数
- 验证时间戳转换正确性(随机抽样验证)
- Property 2: 数据记录数一致性
- Property 3: 时间戳转换正确性
- Validates: Requirements 1.5, 1.6, 11.1
- 编写 Node.js 脚本
- 10.1 完成 users 数据迁移
-
11. 商品数据迁移
- 11.1 迁移 goods 数据
- 当前状态: 0/503 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_goods.js - 从 MySQL goods 查询数据,转换并插入到 SQL Server goods 表
- 保留福利屋和限购配置
- Requirements: 2.6, 2.7
- 11.2 迁移 goods_items 数据
- 当前状态: 0/1,844 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_goods_items.js - 从 MySQL goods_list 迁移到 SQL Server goods_items
- Requirements: 2.6
- 11.3 迁移 goods_types 数据
- 当前状态: 0/13 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_goods_types.js - 从 MySQL goods_type 迁移到 SQL Server goods_types
- Requirements: 2.6
- 11.4 迁移 goods_extensions 数据
- 当前状态: 0/34 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_goods_extensions.js - 从 MySQL goods_extend 迁移到 SQL Server goods_extensions
- Requirements: 2.6
- 11.5 迁移 prize_levels 数据
- 当前状态: 0/106 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_prize_levels.js - 从 MySQL shang 迁移到 SQL Server prize_levels
- Requirements: 2.6
- 11.6 编写商品数据验证脚本
- 编写 Node.js 脚本
server/C#/scripts/validate_goods_migration.js - Property 2: 数据记录数一致性
- Property 5: 业务配置完整性
- Validates: Requirements 2.6, 2.7, 11.1
- 编写 Node.js 脚本
- 11.1 迁移 goods 数据
-
12. 订单数据迁移
- 12.1 迁移 orders 数据
- 当前状态: 15/15 条记录 ✅ 完成
- Requirements: 3.5
- 12.2 迁移 order_items 数据
- 当前状态: 67/67 条记录 ✅ 完成
- Requirements: 3.5
- 12.3 迁移 order_items_recovery 和 order_items_send 数据
- 当前状态: recovery 8/8条 ✅, send 0/0条 ✅ 完成
- Requirements: 3.5
- 12.4 编写订单数据验证脚本
- Property 2: 数据记录数一致性
- Property 4: 财务数据一致性
- Validates: Requirements 3.5, 11.1, 11.3
- 12.1 迁移 orders 数据
-
[-] 13. 财务数据迁移
- [-] 13.1 完成 profit_money 数据迁移
- 当前状态: 1,150/26,061 条记录已迁移
- 编写 Node.js 脚本
server/C#/scripts/migrate_profit_money.js - 从 MySQL profit_money 查询数据,转换并插入到 SQL Server
- 支持增量迁移(跳过已存在的记录)
- Requirements: 4.7
- 13.2 迁移 profit_integral 数据
- 当前状态: 0/33,487 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_profit_integral.js - 从 MySQL profit_integral 迁移到 SQL Server profit_integral
- Requirements: 4.7
- 13.3 迁移 profit_money2 数据
- 当前状态: 0/19,491 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_profit_money2.js - 从 MySQL profit_money2 迁移到 SQL Server profit_money2
- Requirements: 4.7
- 13.4 迁移 profit_pay 数据
- 当前状态: 0/3,310 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_profit_pay.js - 从 MySQL profit_pay 迁移到 SQL Server profit_pay
- Requirements: 4.7
- 13.5 迁移 profit_ou_qi 数据
- 当前状态: 0/8,355 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_profit_ou_qi.js - 从 MySQL profit_ou_qi 迁移到 SQL Server profit_ou_qi
- profit_score 源表为空,无需迁移数据
- Requirements: 4.7
- 13.6 编写财务数据验证脚本
- 编写 Node.js 脚本
server/C#/scripts/validate_financial_migration.js - 验证余额、积分总和一致性
- Property 4: 财务数据一致性
- Validates: Requirements 4.7, 11.2
- 编写 Node.js 脚本
- [-] 13.1 完成 profit_money 数据迁移
-
14. 优惠券和钻石数据迁移
- 14.1 迁移 coupons 数据
- 当前状态: 0/19 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_coupons.js - 从 MySQL coupon 迁移到 SQL Server coupons
- Requirements: 5.4
- 14.2 迁移 coupon_receives 数据
- 当前状态: 7,799/7,799 条记录 ✅ 完成
- 编写 Node.js 脚本
server/C#/scripts/migrate_coupon_receives.js - 从 MySQL coupon_receive 迁移到 SQL Server coupon_receives
- 保留有效期信息
- Requirements: 5.4
- 14.3 迁移 user_coupons 数据
- 当前状态: 0/0 条记录 (源表为空)
- 无需迁移数据,仅验证表结构
- Requirements: 5.4
- 14.4 迁移 diamond_products 数据
- 当前状态: 0/5 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_diamond_products.js - 从 MySQL diamond_products 迁移到 SQL Server diamond_products
- Requirements: 6.3
- 14.5 迁移 diamond_orders 数据
- 当前状态: 0/398 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_diamond_orders.js - 从 MySQL diamond_orders 迁移到 SQL Server diamond_orders
- 保留奖励日志
- Requirements: 6.3
- 14.6 编写优惠券和钻石数据验证脚本
- 编写 Node.js 脚本
server/C#/scripts/validate_coupon_diamond_migration.js - Property 7: 数据迁移往返一致性
- Validates: Requirements 5.4, 6.3
- 编写 Node.js 脚本
- 14.1 迁移 coupons 数据
-
15. 任务签到和VIP数据迁移
- 15.1 迁移 tasks 数据
- 当前状态: 0/9 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_tasks.js - 从 MySQL task_list 迁移到 SQL Server tasks
- Requirements: 7.1
- 15.2 迁移 user_tasks 数据
- 当前状态: 0/4,899 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_user_tasks.js - 从 MySQL user_task_list 迁移到 SQL Server user_tasks
- Requirements: 7.2
- 15.3 迁移 sign_configs 数据
- 当前状态: 0/35 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_sign_configs.js - 从 MySQL sign_config 迁移到 SQL Server sign_configs
- Requirements: 7.3
- 15.4 迁移 user_signs 数据
- 当前状态: 0/702 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_user_signs.js - 从 MySQL user_sign 迁移到 SQL Server user_signs
- Requirements: 7.4
- 15.5 迁移 vip_levels 数据
- 当前状态: 0/75 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_vip_levels.js - 从 MySQL quan_yi_level 迁移到 SQL Server vip_levels
- Requirements: 8.1
- 15.6 迁移 vip_level_rewards 数据
- 当前状态: 0/225 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_vip_level_rewards.js - 从 MySQL quan_yi_level_jiang 迁移到 SQL Server vip_level_rewards
- Requirements: 8.2
- 15.7 迁移 user_vip_rewards 数据
- 当前状态: 0/1,393 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_user_vip_rewards.js - 从 MySQL user_quan_yi_level_jiang 迁移到 SQL Server user_vip_rewards
- Requirements: 8.3
- 15.8 编写任务签到VIP数据验证脚本
- 编写 Node.js 脚本
server/C#/scripts/validate_task_sign_vip_migration.js - Property 2: 数据记录数一致性
- Validates: Requirements 7.1-7.4, 8.1-8.3
- 编写 Node.js 脚本
- 15.1 迁移 tasks 数据
-
16. 系统配置和管理数据迁移
- 16.1 迁移 configs 数据
- 当前状态: 0/25 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_configs.js - 从 MySQL config 迁移到 SQL Server configs
- Requirements: 9.1
- 16.2 迁移 deliveries 数据
- 当前状态: 0/11 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_deliveries.js - 从 MySQL delivery 迁移到 SQL Server deliveries
- Requirements: 9.2
- 16.3 迁移 pictures 数据
- 当前状态: 0/1,175 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_pictures.js - 从 MySQL picture 迁移到 SQL Server pictures
- Requirements: 9.3
- 16.4 迁移 adverts 数据
- 当前状态: 0/16 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_adverts.js - 从 MySQL advert 迁移到 SQL Server adverts
- Requirements: 9.4
- 16.5 迁移 admins 数据
- 当前状态: 0/3 条记录
- 编写 Node.js 脚本
server/C#/scripts/migrate_admins.js - 从 MySQL admin 迁移到 SQL Server admins
- 管理日志表仅保留结构,不迁移数据
- Requirements: 10.1
- 16.6 编写系统配置数据验证脚本
- 编写 Node.js 脚本
server/C#/scripts/validate_system_migration.js - Property 2: 数据记录数一致性
- Validates: Requirements 9.1-9.4, 10.1
- 编写 Node.js 脚本
- 16.1 迁移 configs 数据
-
17. Checkpoint - 数据迁移验证
- 验证所有表的记录数是否一致
- 验证财务数据总和是否一致
- 确保所有测试通过,如有问题请询问用户
-
18. 索引和约束优化
- 18.1 验证所有表的主键约束
- 验证主键是否正确创建
- Requirements: 12.1
- 18.2 验证常用查询字段索引
- 根据业务查询模式验证索引
- Requirements: 12.2
- 18.3 验证表和字段注释
- 确保所有表和字段都有注释
- Requirements: 12.5
- 18.4 验证唯一约束
- 为唯一字段验证约束
- Requirements: 12.4
- 18.5 编写索引和约束验证脚本
- Property 6: 索引和约束完整性
- Validates: Requirements 12.1, 12.2, 12.4, 12.5
- 18.1 验证所有表的主键约束
-
19. 生成数据验证报告
- 19.1 编写综合验证报告生成脚本
- 列出每个表的迁移前后记录数对比
- 列出财务数据一致性验证结果
- 列出索引和约束创建状态
- Requirements: 11.4
- 19.2 执行完整数据验证
- Property 2: 数据记录数一致性
- Property 4: 财务数据一致性
- Property 6: 索引和约束完整性
- Validates: Requirements 11.1, 11.2, 11.3, 11.4
- 19.1 编写综合验证报告生成脚本
-
20. Final Checkpoint - 迁移完成验证
- 确保所有验证脚本通过
- 生成最终迁移报告
- 确保所有测试通过,如有问题请询问用户
数据统计摘要(基于最新MySQL数据)
| 表类别 | 表数量 | MySQL总记录数 | SQL Server已迁移 | 待迁移 |
|---|---|---|---|---|
| 用户系统 | 4 | 17,339 | 17,339 | 0 ✅ |
| 商品系统 | 5 | 2,500 | 2,458 | 42 |
| 订单系统 | 4 | 90 | 90 | 0 ✅ |
| 财务系统 | 6 | 90,704 | 1,150 | 89,554 |
| 优惠券系统 | 3 | 7,865 | 0 | 7,865 |
| 钻石系统 | 2 | 403 | 0 | 403 |
| 任务签到 | 4 | 5,645 | 0 | 5,645 |
| VIP系统 | 3 | 1,693 | 0 | 1,693 |
| 系统配置 | 4 | 1,227 | 0 | 1,227 |
| 管理后台 | 3 | 3 (仅admins) | 0 | 3 |
| 合计 | 38 | 127,241 | 4,764 | 122,477 |
Notes
- 所有任务(包括测试任务)都必须完成,确保迁移质量
- 每个任务都引用了具体的需求编号,确保可追溯性
- Checkpoint 任务用于阶段性验证,确保迁移质量
- 属性测试验证迁移后数据的正确性和完整性
- 建议在测试环境完成所有验证后再进行生产环境迁移
- 根据 Requirements 12.3,所有表不创建外键约束
- 根据 Requirements 12.5,所有表和字段都需要添加注释
Node.js 迁移脚本规范
- 脚本位置:
server/C#/scripts/migrate_*.js - 数据库配置: 参考
~/.kiro/settings/mcp.json - 依赖包:
mysql2: 连接 MySQL 数据库mssql: 连接 SQL Server 数据库
- 脚本功能:
- 连接 MySQL 源数据库,查询数据
- 数据转换(时间戳、字段名映射等)
- 连接 SQL Server 目标数据库,批量插入数据
- 支持增量迁移(跳过已存在的记录)
- 输出迁移进度和结果统计
- 运行方式:
node server/C#/scripts/migrate_xxx.js