开发人员和产品之间的Wordpress数据库同步


19

之前有人问过有关如何在两个Wordpress安装之间同步文件和数据库的问题。

对于数据库级别,答案通常是基本上转储一个数据库并将其插入另一台服务器。这样做的问题是,您最终会丢失可能在产品服务器上进行的所有更改。例如,使用指标,评论等...

考虑到这一点,我开始怀疑是否有可能扩展Wordpress ORM,以便您可以生成增量,然后将其注入到生产站点中。

是否有人尝试过,研究过,或者有任何想法或意见?


1
我已经研究过了,是的,但是还没有完成很多事情。如果您可以指向其他CMS平台的概念验证,那么我相信我们可以为WordPress重新设置它的概念。
EAMann 2011年

复制怎么样?
kovshenin 2011年

使用mysql进行良好的复制将需要某种形式的主-主复制,即PITA。如果考虑到这是介于dev和prod之间的事实,则必须延迟复制,这很可能会一直中断。
jonathanserafini

Answers:


11

现实情况是我们想要的是这样的:http : //www.liquibase.org/

Liquibase是一个开放源代码(Apache 2.0许可)的数据库独立库,用于跟踪,管理和应用数据库更改。它建立在一个简单的前提下:所有数据库更改都以人类可读但可跟踪的形式存储并检入源代码管理。

但是我们的开发过程不支持它。通常,我们不会通过自己编写的离散脚本来修改数据库,而是使用激活的插件。我们不编写DML脚本来修改查找数据,然后将其检入源代码控制,我们在管理页面上使用UI,因此没有源代码供以后在迁移期间复制更改时使用。

但是,我们可以使用页面上列出的一些工具来模拟其中的一些:

/programming//q/225772/149060

例如,液基具有差异功能,该功能还可选地包括对数据的更改。我们可以潜在地将模式和数据差异输出到脚本,不包括(尽可能)排除可能包含测试数据的某些表(例如post等),然后将脚本应用于生产数据库。

MySQLDiff(在StackOverflow问题上进行了讨论)进行了模式差异,并且作者建议使用mysql_coldiff进行逐表数据差异-如果Java工具(liquidbase)对于您的服务器来说资源过多,则两者均在perl中实现-尽管将两个数据库都置于本地并在PC上运行该工具即可解决该问题...

如果我们确实想正确执行此操作,则应该记录与设置,选项或其他配置更改以及任何模式更改相关的所有sql,并将记录的代码转换为迁移脚本以与生产服务器一起使用。在服务器上播放迁移脚本,复制wordpress站点文件(不包括上载,如果适用),我们是黄金。

因此,在我看来,最好的出路是开发人员的migration-builder-plugin,该插件可以捕获所需的sql,进行存储,然后根据记录的代码生成迁移脚本,而不是构建合并数据库的方法在分期和生产之间。似乎也解决了一个更简单的问题。

如果我们看@bueltge的检测钩子调用插件的代码以获取灵感:https ://gist.github.com/1000143 (感谢Ron Rennick通过G +向我指出SAVEQUERIES和关闭钩子的方向,引导我找到它)

-更改它以获取SAVEQUERIES输出 
-仅在管理员状态下运行 
-过滤所有选择 
-将结果保存到关闭挂钩中的表中 
-我们可以根据当前的操作有选择地切换输出陷阱。  

例如:

捕获名称:激活并配置XYZ插件

捕获状态切换-开启

...安装并配置XYZ插件

捕获状态切换-关闭

导出迁移脚本,用于:激活和配置XYZ插件

按下Export Button(导出按钮)-产生带有过滤的捕获SQL的弹出文本字段-理想情况下预先格式化为shell脚本,并通过命令行调用mysql。将其复制并粘贴到您的迁移代码文件夹中,然后添加到您的源代码存储库中。

在工作时,请注意打开和关闭捕获,并能够生成完美的迁移脚本,以将生产数据库转换为与登台数据库等效的配置。

更好的是,您将拥有可以测试的脚本(或一系列相同的脚本)。具有可复制,可测试的迁移脚本的映像!!

我已经恋爱了。

还有谁?


2
不错的文章。我一直在解决这个问题上花费了大量时间,因为我一直在寻求客户的帮助。这是一个非常棘手的问题,但是我们已经决定,降级到SQL级别可能是过多的“煮沸海洋”解决方案,这意味着使它100%正常工作的可能性很小。我认为解决方案是使用“分而治之”的方法,并使用能理解WordPress结构的显式代码,并为其他任何内容提供钩子。我希望我们将来能在某个时候公开提出可行的解决方案。
2011年

所以...谁想做这个?
Dave Kiss

对于任何寻找的人来说,似乎可以将相同的想法作为插件使用:wordpress.org/plugins/query-recorder
majick

3

数据库同步 WordPress插件做两台服务器之间同步数据的一个伟大的工作。

默认情况下,它会覆盖所有目标数据,但是我刚刚对插件实施了一些增强功能,使您仅能同步特定的数据库表。这可以帮助您保留不想覆盖的评论,用户和其他此类数据。这会给您所需的粒度吗?

我尚未公开发布更改,但如果您对副本感兴趣,请发送电子邮件至simon-at-yump.com.au。如果有人发现此功能有用或有其他功能要求,请告诉我,我会做的。


更新:我也刚刚找到WP-Sync-DB插件,它是商业WP-Migrate-DB-Pro插件的分支。它做的事情非常相似,尽管可能比Database Sync更完善


0

有专门针对此任务的相对较新的商业服务。它被称为RAMP:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
该服务有一些限制,使其不适合我的用例:
marfarma 2011年

2
我的用例-在生产中添加内容时添加功能。Quote:“当前不支持以下项目:设置(核心和插件设置,除非它们选择加入RAMP)” 99.99%的主题和插件选项和设置不会迁移。如果不对生产进行代码更改,则自定义帖子类型将不会迁移。无需添加自定义表及其数据。
marfarma 2011年

1
该产品确实具有有效的用例-暂存内容,然后将其实时发布。不幸的是,这不是我关心的问题。返回OP,目前尚不清楚他正在处理哪个用例-因此,这可能是他们商店的理想解决方案。
marfarma 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.