开发与生产数据库

时间:2014-02-27 21:38:13

标签: php mysql codeigniter deployment

如果您正在使用开发服务器而且还有实时生产服务器,那么将开发服务器上发生的任何数据库更改迁移到实时服务器的最佳方法是什么。

我的基础是PHP和CI

1 个答案:

答案 0 :(得分:0)

迁移和迁移管理是DB-Code版本更改管理的一个巨大而复杂的问题。没有简短的帖子可以很好地解决它,但在这里我去......

通常,如果您使用类似Eloquent或框架的ORM,则它们具有迁移机制,如果更新了架构和模型代码,则在开发db上运行迁移。然后,当您实时推送该代码时,您可以在实时服务器上运行它。

如您对帖子的评论中所述,存在许多第三方工具,但对于大多数基本情况,您可以使用简单的迁移文件来管理更改。但是,如果您对DB进行非代码相关的更改(例如索引更改或数据添加/删除),则工具很有用。这是MySQL自己的工具:http://www.mysql.com/products/workbench/migrate/

现在我假设你正在使用某种版本控制,所以如果你不是一个构建迁移支持工具的人,你可以简单地保留一个sql迁移脚本目录,用于给出提交级别的代码手动。将开发分支代码合并到生产分支并实时推送时,请在生产数据库上运行迁移alter table脚本。这些脚本应该包含所有更改和手动插入。然后,您可以保留迁移表并跟踪已运行的迁移脚本。

对于奖励积分,您可以创建迁移的回滚版本。这样您就可以在返回到先前的代码版本之前应用(因为您可能需要回滚生产版本来处理错误或其他内容)。然后在没有合作伙伴回滚的情况下永远不提交迁移。

例如,如果我向User类添加一个新属性,address2:

migration_1_add_address_2_to_user.sql;

 alter table user add column address2 varchar(64);

rollback_1_add_address_2_to_user.sql

   alter table user drop column address2;

祝你好运!