使用yii框架进行测试和生产服务器部署 - 同步数据库更改

时间:2011-09-13 07:44:11

标签: mysql deployment yii mysql-management web-deployment

我正在开发基于Yii框架的应用程序,我必须在本地计算机上测试应用程序,然后准备好将更改移动到生产服务器。

应用程序将在人们使用它时开发并要求新功能。因此,当我在测试机器上更改我的数据库模式时,我必须将这些更改应用于生产数据库的模式,而不会在那里销毁数据。

有一种推荐和方便的方法来处理这个问题吗?同步源代码不是问题,我使用svn,可以做svn导出; rsync ......

4 个答案:

答案 0 :(得分:2)

MySQLWorkbench可以帮助同步数据库模式以及其他数据库设计任务。

Yii确实支持Migrations(从v1.1.6开始),虽然它可能比它的价值更麻烦,具体取决于你做出更改的频率以及项目的协作程度。

我使用的另一种方法是在svn中保存更新语句的日志,并基本上手动处理迁移。

最佳方法取决于您特定项目/工作流程的成本/收益。

答案 1 :(得分:1)

您可以尝试SQLyog's架构同步工具,它是一种可视比较/同步工具,专为在不同MySQL服务器之间工作或需要在两个MySQL服务器之间保持数据库同步的开发人员而设计。这意味着报告两个数据库的表,索引,列和例程之间的差异,并生成脚本以使它们处于同步状态。只有Schema才会在目标中同步。

答案 2 :(得分:1)

对于类似的项目我们

  1. 使用MySQLWorkbench(MWB)设计和编辑架构
  2. 通过VCS共享.mwb文件。
  3. 当我们其中一个人对变更感到满意时,他在生产和测试模式上使用mysqldump --complete-insert ...来生成带有字段名称的现有测试和生产数据的副本
  4. 取出(3)中的所有生产服务器插入语句并将它们放入protected / data / insert.sql
  5. 在修改后的模型上使用MWB中的“前向工程师”菜单项生成sql以保存到名为protected / data / create.sql的文件,并根据需要进行手动编辑(请务必使用if exists减少错误的条款)
  6. 根据(3)
  7. 中的drop语句编写drop.sql文件
  8. 使用MWB,在发出标识生产数据库的相应“use database”命令后运行sql(drop.sql,create.sql,insert.sql)
  9. 通过删除由于新模型/模式中不需要的列/字段而导致的任何无效插入来处理(7)中的所有错误。重新运行(7)
  10. 处理(7)中需要除Null之外的数据的新字段。重新运行(7)
  11. 现在您有一个架构的快照(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