5.8 KiB
5.8 KiB
旧存储桶迁移执行计划(谨慎方案)
迁移原则
- 不删除旧存储桶中的文件(作为备份)
- 迁移过程中出错时,文件不会丢失
- 分阶段执行,每阶段验证后再继续
- 可以随时暂停和恢复
迁移统计
- 需要迁移的素材总数: 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"
回滚方案
如果迁移出现问题,可以回滚:
- 数据库回滚: 使用数据库备份恢复URL
- 文件回滚: 旧存储桶中的文件未删除,可以直接使用
- 重新迁移: 修复问题后,可以重新运行迁移脚本(脚本会自动跳过已存在的文件)
注意事项
- 迁移过程中不要中断: 如果中断,可以重新运行脚本,已迁移的文件会被跳过
- 验证每个阶段: 每完成一个阶段,都要验证迁移结果
- 保留旧文件: 旧存储桶中的文件作为备份,迁移完成后不要立即删除
- 监控系统: 迁移过程中监控系统运行状态
- 备份数据库: 在开始迁移前,建议备份数据库
执行记录
阶段1: 试运行
- 执行时间: ___________
- 执行结果: ___________
- 验证结果: ___________
阶段2: 小批量测试(5个)
- 执行时间: 2025-01-12
- 执行结果: ✅ 成功迁移5个素材,共18个文件
- 验证结果: ✅ 文件上传成功,数据库已更新,新URL格式正确
阶段3: 中等批量(20个)
- 执行时间: ___________
- 执行结果: ___________
- 验证结果: ___________
阶段4: 大批量(50个)
- 执行时间: ___________
- 执行结果: ___________
- 验证结果: ___________
阶段5: 全量迁移
- 执行时间: ___________
- 执行结果: ___________
- 验证结果: ___________
完成后清理(可选)
迁移完成并验证无误后,可以考虑清理旧存储桶:
- 等待一段时间: 建议等待1-2周,确保没有问题
- 再次验证: 确认所有文件都可以正常访问
- 备份确认: 确认有完整的备份
- 清理旧文件: 可以手动清理旧存储桶中的文件(可选)
相关文件
- 迁移脚本:
scripts/migrate-old-storage-to-new.ts - 统计脚本:
scripts/analyze-old-storage-migration.ts - 检查脚本:
scripts/check-s3-file.ts - 统计报告:
docs/旧存储桶迁移统计报告.md