事实是,我们想要的是:http://www.liquibase.org/
Liquibase是一个开源(Apache 2.0许可)的独立于数据库的库,用于跟踪、管理和应用数据库更改。它建立在一个简单的前提上:所有数据库更改都以可读但可跟踪的形式存储,并检入源代码管理。
然而,我们的开发过程不支持它。我们通常不通过自己编写的离散脚本修改数据库,而是使用激活的插件。我们不编写DML脚本来修改查找数据,然后将其签入源代码控制,我们在管理页面上使用UI,因此没有源代码供以后在迁移期间复制该更改时使用。
但是,我们可以使用本页列出的一些工具来模拟其中的一些:
https://stackoverflow.com/q/225772/149060
例如,liquidbase有一个diff特性,还可以选择包括对数据的更改。我们可以潜在地将模式和数据差异输出到脚本,排除(尽可能)可能包含测试数据的某些表(即post等),然后将脚本应用到生产数据库。
MySQLDiff(讨论了StackOverflow问题)进行模式差异,作者建议mysql_coldiff 对于表级数据差异,如果java工具(liquidbase)对服务器来说资源太多,则两者都是用perl实现的,尽管将这两个数据库都本地化并在PC上运行该工具可以解决这个问题。。。
如果我们真的想做得对,我们应该记录与设置、选项或其他配置更改以及任何架构更改相关的任何sql,并将记录的代码转换为迁移脚本,以便在生产服务器上运行。在服务器上播放迁移脚本,复制wordpress站点文件(不包括上传,如果适用),我们就成功了。
因此,在我看来,最好的解决方法是开发人员的迁移生成器插件,它可以捕获我们需要的sql,存储它,然后根据记录的代码生成迁移脚本,而不是构建一种在暂存和生产之间合并数据库的方法。似乎也是一个更简单的问题。
如果我们看一下@bueltge的插入钩子调用插件的代码,可以从中获得灵感:https://gist.github.com/1000143 (感谢Ron Rennick通过G+为我指明了SAVEQUERIES和关机挂钩的方向,这让我找到了它)
-- alter it to get the SAVEQUERIES output instead
-- only run while in admin
-- filter out all selects
-- save results out to table in the shutdown hook
-- we could selectively toggle output trapping based on what we were doing at the moment.
例如:
捕获名称:激活(&A);配置插件XYZ
捕获状态切换-打开
。。。安装和配置插件XYZ
捕获状态切换-关闭
导出迁移脚本:激活(&A);配置插件XYZ
按Export按钮——生成一个带有过滤后的陷阱SQL的弹出文本字段——理想情况下,预先格式化为shell脚本,并通过命令行调用mysql。&复制;将其粘贴到迁移代码文件夹中,并添加到源代码存储库中。
在工作过程中,请仔细切换捕获的开与关,这样您就能够生成完美的迁移脚本,将生产数据库转换为与临时数据库等效的配置。
更好的是,您将有一个脚本(或一系列相同的脚本)可以测试。映像具有可复制、可测试的迁移脚本!!
我已经恋爱了。
还有其他人吗?