我正在开发基于Yii框架的应用程序,我必须在本地计算机上测试应用程序,然后准备好将更改移动到生产服务器。
应用程序将在人们使用它时开发并要求新功能。因此,当我在测试机器上更改我的数据库模式时,我必须将这些更改应用于生产数据库的模式,而不会在那里销毁数据。
有一种推荐和方便的方法来处理这个问题吗?同步源代码不是问题,我使用svn,可以做svn导出; rsync ......
答案 0 :(得分:2)
MySQLWorkbench可以帮助同步数据库模式以及其他数据库设计任务。
Yii确实支持Migrations(从v1.1.6开始),虽然它可能比它的价值更麻烦,具体取决于你做出更改的频率以及项目的协作程度。
我使用的另一种方法是在svn中保存更新语句的日志,并基本上手动处理迁移。
最佳方法取决于您特定项目/工作流程的成本/收益。
答案 1 :(得分:1)
您可以尝试SQLyog's架构同步工具,它是一种可视比较/同步工具,专为在不同MySQL服务器之间工作或需要在两个MySQL服务器之间保持数据库同步的开发人员而设计。这意味着报告两个数据库的表,索引,列和例程之间的差异,并生成脚本以使它们处于同步状态。只有Schema才会在目标中同步。
答案 2 :(得分:1)
对于类似的项目我们
mysqldump --complete-insert
...来生成带有字段名称的现有测试和生产数据的副本if exists
减少错误的条款)现在您有一个架构的快照(drop.sql create.sql)以及您的数据,如果您遇到问题,它们应该恢复您的测试或生产服务器。并且您拥有生产服务器(insert.sql)中的数据“夹具”,可用于使您的测试服务器加速,或作为生产服务器数据的备份(很快就会过时) 。显然所有外键关系都是非常痛苦的,所以insert.sql很少用于除了升级架构和在此更改后恢复生产数据之外的任何事情。显然,需要一些时间来解决过程中的问题,以便(3)和(9)之间的延迟足够小,以至于生产服务器用户不会注意到停机时间。
显然“重新运行(7)”会重复并迅速变成一个直接调用mysql的shell脚本。 sql编辑过程中的其他步骤也变为sed
脚本。
答案 3 :(得分:0)
查看dbForge Studio for MySQL中的schema comparison工具。 此工具将帮助您比较和同步两个数据库或database project与指定的数据库。
还有单独的工具 - dbForge Schema Compare for MySQL。