gongxiangp2/docs/旧存储桶迁移执行计划.md

5.8 KiB
Raw Blame History

旧存储桶迁移执行计划(谨慎方案)

迁移原则

  1. 不删除旧存储桶中的文件(作为备份)
  2. 迁移过程中出错时,文件不会丢失
  3. 分阶段执行,每阶段验证后再继续
  4. 可以随时暂停和恢复

迁移统计

  • 需要迁移的素材总数: 125 个视频素材
  • 总文件大小: 971.89 MB
  • 估算迁移时间: 约 2-3 分钟(100 Mbps网速)

分阶段执行计划

阶段1: 试运行(验证脚本)

目的: 验证脚本逻辑,不实际迁移

cd d:\gongxiangp2
$env:DATABASE_URL="postgresql://gongxiangpan:gongxiangpan123@192.168.58.20:5432/lobechat"
npx tsx scripts/migrate-old-storage-to-new.ts --dry-run --limit 5

验证点:

  • 脚本能正常运行
  • 显示的迁移计划正确
  • 新URL格式正确

阶段2: 小批量测试(5个素材)

目的: 实际迁移少量素材,验证迁移流程

cd d:\gongxiangp2
$env:DATABASE_URL="postgresql://gongxiangpan:gongxiangpan123@192.168.58.20:5432/lobechat"
npx tsx scripts/migrate-old-storage-to-new.ts --limit 5

验证点:

  • 文件成功下载
  • 文件成功上传到新存储桶
  • 数据库URL已更新
  • 新URL可以正常访问
  • 旧存储桶中的文件仍然存在(未删除)

验证命令:

# 检查数据库中的URL是否已更新
# 检查新存储桶中是否有文件
# 检查旧存储桶中的文件是否还在

如果成功: 继续下一阶段
如果失败: 检查错误日志,修复问题后重试


阶段3: 中等批量(20个素材)

目的: 扩大测试范围,验证批量迁移稳定性

cd d:\gongxiangp2
$env:DATABASE_URL="postgresql://gongxiangpan:gongxiangpan123@192.168.58.20:5432/lobechat"
npx tsx scripts/migrate-old-storage-to-new.ts --limit 20

验证点:

  • 所有文件迁移成功
  • 没有遗漏的文件
  • 数据库更新正确
  • 新URL可以正常访问

如果成功: 继续下一阶段
如果失败: 检查错误,修复后重试


阶段4: 大批量(50个素材)

目的: 进一步扩大测试范围

cd d:\gongxiangp2
$env:DATABASE_URL="postgresql://gongxiangpan:gongxiangpan123@192.168.58.20:5432/lobechat"
npx tsx scripts/migrate-old-storage-to-new.ts --limit 50

验证点:

  • 所有文件迁移成功
  • 迁移时间在预期范围内
  • 系统运行正常

如果成功: 继续全量迁移
如果失败: 检查错误,修复后重试


阶段5: 全量迁移(剩余所有素材)

目的: 完成所有素材的迁移

cd d:\gongxiangp2
$env:DATABASE_URL="postgresql://gongxiangpan:gongxiangpan123@192.168.58.20:5432/lobechat"
npx tsx scripts/migrate-old-storage-to-new.ts

验证点:

  • 所有125个素材都已迁移
  • 所有文件都可以正常访问
  • 数据库URL都已更新
  • 旧存储桶中的文件仍然存在(作为备份)

验证步骤

1. 验证文件迁移成功

# 检查新存储桶中的文件数量
# 使用 check-s3-file.ts 脚本验证文件可访问
npx tsx scripts/check-s3-file.ts "<新URL>"

2. 验证数据库更新

-- 检查已迁移的素材数量
SELECT COUNT(*) FROM "Material" 
WHERE materialType IN ('主图视频', '安装视频', '种草视频')
  AND deletedAt IS NULL
  AND (
    previewUrl LIKE 'https://s3.yydd.ai/gongxiangpan/%' OR
    videoCoverUrl LIKE 'https://s3.yydd.ai/gongxiangpan/%' OR
    videoPreview540Url LIKE 'https://s3.yydd.ai/gongxiangpan/%' OR
    videoPreviewClipUrl LIKE 'https://s3.yydd.ai/gongxiangpan/%'
  );

3. 验证旧存储桶文件未删除

# 使用 curl 检查旧存储桶中的文件是否仍然存在
curl -I "https://s3.1080p.hk/jsxiangche/由壹点AI/video-cover-xxx.jpg"

回滚方案

如果迁移出现问题,可以回滚:

  1. 数据库回滚: 使用数据库备份恢复URL
  2. 文件回滚: 旧存储桶中的文件未删除,可以直接使用
  3. 重新迁移: 修复问题后,可以重新运行迁移脚本(脚本会自动跳过已存在的文件)

注意事项

  1. 迁移过程中不要中断: 如果中断,可以重新运行脚本,已迁移的文件会被跳过
  2. 验证每个阶段: 每完成一个阶段,都要验证迁移结果
  3. 保留旧文件: 旧存储桶中的文件作为备份,迁移完成后不要立即删除
  4. 监控系统: 迁移过程中监控系统运行状态
  5. 备份数据库: 在开始迁移前,建议备份数据库

执行记录

阶段1: 试运行

  • 执行时间: ___________
  • 执行结果: ___________
  • 验证结果: ___________

阶段2: 小批量测试(5个)

  • 执行时间: 2025-01-12
  • 执行结果: ✅ 成功迁移5个素材,共18个文件
  • 验证结果: ✅ 文件上传成功,数据库已更新,新URL格式正确

阶段3: 中等批量(20个)

  • 执行时间: ___________
  • 执行结果: ___________
  • 验证结果: ___________

阶段4: 大批量(50个)

  • 执行时间: ___________
  • 执行结果: ___________
  • 验证结果: ___________

阶段5: 全量迁移

  • 执行时间: ___________
  • 执行结果: ___________
  • 验证结果: ___________

完成后清理(可选)

迁移完成并验证无误后,可以考虑清理旧存储桶:

  1. 等待一段时间: 建议等待1-2周,确保没有问题
  2. 再次验证: 确认所有文件都可以正常访问
  3. 备份确认: 确认有完整的备份
  4. 清理旧文件: 可以手动清理旧存储桶中的文件(可选)

相关文件

  • 迁移脚本: scripts/migrate-old-storage-to-new.ts
  • 统计脚本: scripts/analyze-old-storage-migration.ts
  • 检查脚本: scripts/check-s3-file.ts
  • 统计报告: docs/旧存储桶迁移统计报告.md