database-migration-cdlisted
Install: claude install-skill structure-projects/structure-agent-rules
# 数据库迁移 CD
> 在 CI/CD 流水线中安全执行数据库迁移。**生产迁移 MUST 用户确认 + 备份**。
## 核心原则
- ✅ **MUST** 迁移脚本与应用代码同 PR 提交(保持版本一致)
- ✅ **MUST** 迁移在应用部署**之前**执行(先 DB 后 App)
- ✅ **MUST** 迁移前备份生产数据库
- ✅ **MUST** 迁移失败时应用部署中止
- ❌ **MUST NOT** 在生产环境跳过备份直接迁移
## Flyway 迁移工作流
### 在 CI 流水线中的位置
```
代码提交 → 单测 → 打包 → 镜像构建
↓
DB 迁移(测试)→ 应用部署(测试)
↓
测试验证
↓
生产审批(人工)
↓
DB 备份(生产)
↓
DB 迁移(生产)
↓
应用部署(生产)
↓
健康检查
```
### GitHub Actions 集成
```yaml
# .github/workflows/deploy.yml
jobs:
migrate-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Flyway migrate (test)
run: |
mvn flyway:migrate \
-Dflyway.url=jdbc:mysql://test-mysql:3306/mydb \
-Dflyway.user=${{ secrets.DB_USER }} \
-Dflyway.password=${{ secrets.DB_PASSWORD }}
deploy-test:
needs: migrate-test # 迁移成功后才部署
# ...
migrate-prod:
needs: approval # 人工审批后
runs-on: ubuntu-latest
steps:
- name: Backup production DB
run: |
mysqldump -h prod-mysql -u ${{ secrets.DB_USER }} -p${{ secrets.DB_PASSWORD }} mydb > backup-$(date +%Y%m%d-%H%M%S).sql
- nam