Prisma migrate再开发环境 手动执行迁移sql,再同步前几记录到migrate记录表
对就是这个意思而且完全可行——也是很多团队的做法开发Prismamigrate dev生成并验证 SQL生产只手动执行 Git 里那份migration.sql流程固定下来就这样开发环境每次改表# 1. 改 prisma/schema.prisma# 2. 生成迁移 本地自动执行npx dotenv-cli-e.env.dev -- npx prisma migrate dev--nameadd_xxx# 3. 生成 Client 改代码npx prisma generate# 4. 提交重点migration.sql 要进 Gitgitaddprisma/schema.prisma prisma/migrations/gitcommit-mfeat: add xxx此时会有例如prisma/migrations/20250625_add_xxx/migration.sql生产环境只跑 SQL不跑 migrate dev / reset# 0. 备份数据库必做# 1. 打开本次发布对应的 migration.sql在 MySQL 执行# 命令行、Navicat、运维平台均可mysql...prisma/migrations/20250625_add_xxx/migration.sql# 或复制文件里的 ALTER TABLE ... 执行# 2. 告诉 Prisma「这条在生产已应用」避免以后有人误跑 deploy 重复执行npx dotenv-cli-e.env.prod -- npx prisma migrate resolve--applied20250625_add_xxx# 3. 部署新版本应用仍可用 Prisma Client 查库npx prisma generate# 一般在构建机/CI 做不是生产改表生产不要跑migrate devmigrate resetdb push生产可以跑可选migrate resolve --applied只写迁移记录不执行 SQLmigrate status检查 dev/prod 是否一致为什么还要migrate resolve生产手动执行 SQL 后MySQL 表已经变了但_prisma_migrations表里还没有这条记录。若不resolve以后有人跑migrate deploy会再执行一遍同一条 SQL → 可能报错列已存在migrate status会显示drift / 未应用resolve --applied只登记「这条迁移在生产已做过」不重复执行 SQL。一张图开发 改 schema → migrate dev → 生成 migration.sql 本地执行 ↓ Git 提交 migration.sql ↓ 生产 备份 → 手动执行 migration.sql → migrate resolve --applied ↓ 部署应用Prisma Client注意点你项目SQL 以 Git 为准生产只执行已合并发布的那份不要现场改。先 staging 再生产同一文件在预发跑一遍。IM 仍 mysql2表结构变了IM 代码也要发版不只 admin。Prisma Client 照用只是改表在生产不用 CLI 自动跑。第一次 baseline0_init若生产表已存在用resolve --applied 0_init不要重复执行整份 CREATE。一句话你的方案对开发用 Prisma migrate 生成并验证生产只手动执行migrations/*/migration.sql再用migrate resolve --applied对齐记录。这样既保留 Prisma 开发体验又避免在生产跑不确定的 CLI 命令。