mysql – 处理生产部署的SQL更新

我现在正在研究很长一段时间(大约两个月)并且没有找到一个很好的方法,所以我会问你那里的专家,希望有一些启示.

我在云端运行一个非常传统的LAMP Web应用程序.源代码是使用Git进行VCS,以及数据库模式(用于结构和默认数据的拆分SQL文件).

部署新环境非常令人愉悦,开发或生产.使用Vagrant部署Dev环境以及我编写的一些不错的shell配置脚本.使用Vagrant配置脚本的子集部署生产环境,这也非常容易.

当开发周期对SQL模式(结构或数据)进行更改时,事情就会开始中断.在这种情况下,开发人员更改核心SQL脚本,以便所有更改都进入VCS,这对于全新的环境来说完全没问题.

问题出在已经部署的生产环境中:对于那些,我必须手动获取SQL更改的所有补丁,因为修订实际上首先在所有生产服务器中运行,因此我可以在之后手动应用它们.这需要很长时间才能完成,是一项非常脆弱的任务,容易出错.

最初,我以为我可以将SQL更改从核心SQL文件中移出更小的子集,让核心SQL文件作为起点.当SQL结构有什么变化时,我可以告诉开发人员创建一个新的SQL文件,只包含该开发周期的变化.

所以,例如:

- structure_begin.sql: the SQL schema as it is now.
|- structure_devcycle1.sql: first set of changes to the structure
|- structure_devcycle2.sql: second set of changes to the structure, and so forth...

然后,通过使用Git钩子,我可以选择性地自动在生产中部署它们.但我不知道这是不是一个好方法.在这里我可以问:

>有人在那里解决了这个难题吗?
>生产环境中SQL更改的发布管理和部署自动化的最佳实践是什么?
>是否有任何开源工具可以帮助完成此过程? (我知道Sqitch,,但我不太确定它是否适合这项工作.)

最佳答案
我不确定您是否还需要答案,但我在管理和部署架构更改方面遇到了同样的问题. Sqitch是我尝试机械化迁移的第一件事,但我并不喜欢它.

正如您所描述的那样,我们有单独的.sql文件和CREATE TABLE以及反映我们数据库模式的其他指令.我们创建了简单的工具来在架构更改时生成SQL补丁.看看它:https://github.com/condograde/sqlibrist.有详细的教程,如何使用它.

转载注明原文:mysql – 处理生产部署的SQL更新 - 代码日志