HaniBlindBox/.kiro/specs/database-migration/tasks.md
2026-01-02 05:18:05 +08:00

21 KiB
Raw Blame History

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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • [-] 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
  • 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
  • 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
  • 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
  • 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
  • 19. 生成数据验证报告

    • 19.1 编写综合验证报告生成脚本
      • 列出每个表的迁移前后记录数对比
      • 列出财务数据一致性验证结果
      • 列出索引和约束创建状态
      • Requirements: 11.4
    • 19.2 执行完整数据验证
      • Property 2: 数据记录数一致性
      • Property 4: 财务数据一致性
      • Property 6: 索引和约束完整性
      • Validates: Requirements 11.1, 11.2, 11.3, 11.4
  • 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 数据库
  • 脚本功能:
    1. 连接 MySQL 源数据库,查询数据
    2. 数据转换(时间戳、字段名映射等)
    3. 连接 SQL Server 目标数据库,批量插入数据
    4. 支持增量迁移(跳过已存在的记录)
    5. 输出迁移进度和结果统计
  • 运行方式: node server/C#/scripts/migrate_xxx.js