根据文档,我能够使数据库迁移插件在现有项目上工作,该项目已经有很多表并且正在生产中。我在本地经历了以下过程:
Pulled down latest production database
Source production database to local dev
grails dbm-generate-changelog changelog.groovy
grails dbm-changelog-sync
grails dbm-gorm-diff 2012-06-25-latest.groovy --add
grails dbm-update
我理解为什么我必须在本地进行所有操作才能达到应用 future 变更集的目的。但是,现在我想在其中一台测试服务器上运行2012-06-25-latest.groovy。它已经具有基于我们生产数据库的最新数据库。
我尝试仅运行dbm-update,但是没有同步它无法创建已经存在的表。因此,我运行了dbm-changelog-sync,但是随后在运行dbm-update时,实际上并没有应用最新文件。
我知道我可以在更改集中添加上下文(标记)并在运行dbm-update时指定该上下文,但是我想知道这是否是解决此问题的唯一方法,或者是否需要修改我的工作流程;将变更日志应用于测试服务器的最佳方法是什么?
最佳答案
我最终要做的是删除DATABASECHANGELOG表中FILENAME ='2012-06-25-latest.groovy'的所有行。然后我运行dbm-status,它告诉我我有256个更改在等待。然后,我运行dbm-update,一切正常。
我不确定这是应该怎么做的,但似乎已经奏效了。
更新:除此之外,我可能可以在一个空数据库上运行整个迁移,然后仅使用INSERT语句对生产数据库进行mysqldump。