# 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 - [x] 1. SQL Server 环境搭建和数据库创建 - honey_box 数据库已创建 - 需要配置数据库参数(恢复模式、统计信息、排序规则) - 需要创建应用程序用户和权限 - _Requirements: 阶段2环境搭建_ - [x] 2. 用户系统表结构创建 - [x] 2.1 创建 users 表 - 包含所有用户字段(24个字段),使用 snake_case 命名 - 创建主键、唯一约束(open_id, uid)、索引 - 源表: user (2,201条记录) - _Requirements: 1.1_ - [x] 2.2 创建 user_accounts 表 - 存储用户账户令牌信息(12个字段) - 创建索引(user_id, account_token) - 源表: user_account (3,452条记录) - _Requirements: 1.2_ - [x] 2.3 创建 user_login_logs 表 - 记录用户登录日志(7个字段) - 创建索引(user_id, login_time, platform) - 源表: user_login_log (11,407条记录) - _Requirements: 1.3_ - [x] 2.4 创建 user_addresses 表 - 存储用户收货地址 - 源表: user_address (51条记录) - _Requirements: 1.4_ - [x] 2.5 编写用户表结构验证脚本 - **Property 1: 表结构完整性** - **Validates: Requirements 1.1, 1.2, 1.3, 1.4** - [x] 3. 商品系统表结构创建 - [x] 3.1 创建 goods 表 - 包含完整 54 个字段 - 包含福利屋、限购、特殊功能字段 - 源表: goods (503条记录) - _Requirements: 2.1_ - [x] 3.2 创建 goods_items 表 - 存储商品奖品列表 - 源表: goods_list (1,844条记录) - _Requirements: 2.2_ - [x] 3.3 创建 goods_types 表 - 存储商品类型配置 - 源表: goods_type (13条记录) - _Requirements: 2.3_ - [x] 3.4 创建 goods_extensions 表 - 存储商品扩展配置 - 源表: goods_extend (34条记录) - _Requirements: 2.4_ - [x] 3.5 创建 prize_levels 表 - 存储奖品等级配置 - 源表: shang (106条记录) - _Requirements: 2.5_ - [x] 3.6 编写商品表结构验证脚本 - **Property 1: 表结构完整性** - **Validates: Requirements 2.1, 2.2, 2.3, 2.4, 2.5** - [x] 4. 订单系统表结构创建 - [x] 4.1 创建 orders 表 - 包含完整 33 个字段 - 包含支付方式组合字段 - 源表: order (15条记录) - _Requirements: 3.1_ - [x] 4.2 创建 order_items 表 - 存储订单详情/抽奖结果 - 源表: order_list (67条记录) - _Requirements: 3.2_ - [x] 4.3 创建 order_items_recovery 表 - 存储回收的奖品记录 - 源表: order_list_recovery (8条记录) - _Requirements: 3.3_ - [x] 4.4 创建 order_items_send 表 - 存储发货记录 - 源表: order_list_send (0条记录) - _Requirements: 3.4_ - [x] 4.5 编写订单表结构验证脚本 - **Property 1: 表结构完整性** - **Validates: Requirements 3.1, 3.2, 3.3, 3.4** - [x] 5. 财务系统表结构创建 - [x] 5.1 创建 profit_money 表 - 记录余额变动明细 - 源表: profit_money (26,061条记录) - _Requirements: 4.1_ - [x] 5.2 创建 profit_integral 表 - 记录积分变动明细 - 源表: profit_integral (33,487条记录) - _Requirements: 4.2_ - [x] 5.3 创建 profit_money2 表 - 记录积分2变动明细 - 源表: profit_money2 (19,491条记录) - _Requirements: 4.3_ - [x] 5.4 创建 profit_pay 表 - 记录支付流水 - 源表: profit_pay (3,310条记录) - _Requirements: 4.4_ - [x] 5.5 创建 profit_score 和 profit_ou_qi 表 - 记录评分和欧气值变动 - 源表: profit_score (0条), profit_ou_qi (8,355条) - _Requirements: 4.5, 4.6_ - [x] 6. 优惠券和钻石系统表结构创建 - [x] 6.1 创建 coupons 表 - 存储优惠券模板 - 源表: coupon (19条记录) - _Requirements: 5.1_ - [x] 6.2 创建 coupon_receives 表 - 存储用户领取的优惠券 - 源表: coupon_receive (7,846条记录) - _Requirements: 5.2_ - [x] 6.3 创建 user_coupons 表 - 存储欧气券 - 源表: user_coupon (0条记录) - _Requirements: 5.3_ - [x] 6.4 创建 diamond_products 表 - 存储钻石商品配置 - 源表: diamond_products (5条记录) - _Requirements: 6.1_ - [x] 6.5 创建 diamond_orders 表 - 存储钻石订单记录 - 源表: diamond_orders (398条记录) - _Requirements: 6.2_ - [x] 7. 任务、签到和VIP系统表结构创建 - [x] 7.1 创建 tasks 和 user_tasks 表 - 存储任务配置和用户任务记录 - 源表: task_list (9条), user_task_list (4,899条) - _Requirements: 7.1, 7.2_ - [x] 7.2 创建 sign_configs 和 user_signs 表 - 存储签到配置和用户签到记录 - 源表: sign_config (35条), user_sign (702条) - _Requirements: 7.3, 7.4_ - [x] 7.3 创建 vip_levels 和 vip_level_rewards 表 - 存储VIP等级配置和奖品 - 源表: quan_yi_level (75条), quan_yi_level_jiang (225条) - _Requirements: 8.1, 8.2_ - [x] 7.4 创建 user_vip_rewards 表 - 存储用户领取的VIP奖品 - 源表: user_quan_yi_level_jiang (1,393条) - _Requirements: 8.3_ - [x] 8. 系统配置和管理后台表结构创建 - [x] 8.1 创建 configs 表 - 存储系统配置 - 源表: config (25条记录) - _Requirements: 9.1_ - [x] 8.2 创建 deliveries 和 pictures 表 - 存储快递公司和图片管理 - 源表: delivery (11条), picture (1,175条) - _Requirements: 9.2, 9.3_ - [x] 8.3 创建 adverts 表 - 存储广告配置 - 源表: advert (16条记录) - _Requirements: 9.4_ - [x] 8.4 创建 admins 和管理日志表 - 存储管理员信息和日志(仅结构) - 源表: admin (3条), admin_login_log (398条), admin_operation_log (94,986条) - _Requirements: 10.1, 10.2, 10.3_ - [x] 9. Checkpoint - 表结构创建验证 - 验证所有表是否正确创建 - 验证索引和约束是否正确 - 确保所有测试通过,如有问题请询问用户 - [-] 10. 用户数据迁移 - [x] 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_ - [x] 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_ - [x] 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_ - [x] 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. 商品数据迁移 - [x] 11.1 迁移 goods 数据 - 当前状态: 0/503 条记录 - 编写 Node.js 脚本 `server/C#/scripts/migrate_goods.js` - 从 MySQL goods 查询数据,转换并插入到 SQL Server goods 表 - 保留福利屋和限购配置 - _Requirements: 2.6, 2.7_ - [x] 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_ - [x] 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_ - [x] 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_ - [x] 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** - [x] 12. 订单数据迁移 - [x] 12.1 迁移 orders 数据 - 当前状态: 15/15 条记录 ✅ 完成 - _Requirements: 3.5_ - [x] 12.2 迁移 order_items 数据 - 当前状态: 67/67 条记录 ✅ 完成 - _Requirements: 3.5_ - [x] 12.3 迁移 order_items_recovery 和 order_items_send 数据 - 当前状态: recovery 8/8条 ✅, send 0/0条 ✅ 完成 - _Requirements: 3.5_ - [x] 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. 优惠券和钻石数据迁移 - [x] 14.1 迁移 coupons 数据 - 当前状态: 0/19 条记录 - 编写 Node.js 脚本 `server/C#/scripts/migrate_coupons.js` - 从 MySQL coupon 迁移到 SQL Server coupons - _Requirements: 5.4_ - [x] 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_ - [x] 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_ - [x] 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数据迁移 - [x] 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_ - [x] 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_ - [x] 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_ - [x] 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. 系统配置和管理数据迁移 - [x] 16.1 迁移 configs 数据 - 当前状态: 0/25 条记录 - 编写 Node.js 脚本 `server/C#/scripts/migrate_configs.js` - 从 MySQL config 迁移到 SQL Server configs - _Requirements: 9.1_ - [x] 16.2 迁移 deliveries 数据 - 当前状态: 0/11 条记录 - 编写 Node.js 脚本 `server/C#/scripts/migrate_deliveries.js` - 从 MySQL delivery 迁移到 SQL Server deliveries - _Requirements: 9.2_ - [x] 16.3 迁移 pictures 数据 - 当前状态: 0/1,175 条记录 - 编写 Node.js 脚本 `server/C#/scripts/migrate_pictures.js` - 从 MySQL picture 迁移到 SQL Server pictures - _Requirements: 9.3_ - [x] 16.4 迁移 adverts 数据 - 当前状态: 0/16 条记录 - 编写 Node.js 脚本 `server/C#/scripts/migrate_adverts.js` - 从 MySQL advert 迁移到 SQL Server adverts - _Requirements: 9.4_ - [x] 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`