开发/转储和生产之间的数据库同步

时间:2010-09-22 作者:Alex

我对开发和生产之间的WordPress数据库同步有一个问题,我想知道其他人是如何解决的。我知道this question 但它并没有真正涵盖更恶劣和更现实的用例。

假设我有一个实时的WordPress网站。我把所有东西都转储了,并在我们的开发环境中进行了复制。我开始做出改变。1周后,我已准备好部署更新。同时,生产现场的数据库也发生了变化(新帖子、新评论等)。在推出期间,我如何同步生产和开发之间的更改,是否可以自动化(至少在某种程度上)此过程?

4 个回复
最合适的回答,由SO网友:Chris_O 整理而成

也许我错过了一个更好的方法,但我将给你两个选择:

1。使用XML导出导出您的新帖子和评论。然后使用WordPress Importer 要将新帖子和评论导入到dev数据库中,最好先导入到dev中,然后将数据库移到生产环境中,因为导入时将下载生产环境中的所有新媒体文件。

与此同时,制作发生了变化(新帖子、新评论等)

这将解决您引入任何更改内容的问题。

2。使用INSERT IGNORE INTO 从dev.或REPLACE 命令覆盖同一表中的重复行

在使用MySql之前,备份两个数据库,将gz数据库移动到生产服务器并上载转储(如果与生产相同,请更改dev的名称)。

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`
我不习惯使用MySql命令,所以我会选择选项1。

SO网友:curtismchale

如果只是更多完全相同类型的数据(一些新的博客帖子,新的评论),我不知道为什么你真的需要同步它。它不会改变网站上的代码工作方式,因为它只是更加相同。我通常不担心它,除非它是一种新类型的数据。

我只是总是确保我有一个很好的网站数据样本,没有来自实时网站的每一篇文章、每一页、每一条评论。

SO网友:edelwater

一旦触及并行更改的主题,您就会触及配置管理领域。有很多模式,有自己的社区(http://www.cmcrossroads.com/)这些工具不是用于版本管理(svn/git),而是用于支持配置管理(模式),如clearcase。(完全不同的区域)。

在这种情况下,它仍然是一个简单的情况,您会发现它有一些限制和一些手动工作以及一些列表。

我正在考虑的场景更能描述理想的解决方案:多个开发人员在同一个代码库上工作,多个测试环境,多个验收环境,多个生产验收环境,可能在世界各地。

如果您想更专业一些:

a) 写下你遇到的所有配置项的列表,这可能是WordPress代码本身、来自外部的插件、内容、元数据,并决定你想对其中哪些进行某种“管理”,哪些是重要的。

b) 描述可能发生的工作流,例如修复会发生什么,正在开发的新内容会发生什么,在什么情况下您会更改自己的内容,这叫什么,是谁做的,谁是它的所有者,例如新帖子或新插件。

c) 对于并行工作,首先描述您要管理的CI,确定流程是否总是从开发到生产,或者是否真的需要以两种方式完成所有这一切。

d) 对于(a)下的每种CI类型,请编写解决方案。E、 对于所有文本(或导出的文本,如php文件,但也包括XML文件中的纯文本),合并是可能的。这确实没有问题,但您需要一个好的合并工具。e、 g.使用ClearCase,您将以3种方式合并以下情况:1)琐碎的合并:它将自动执行这些操作2)非琐碎的自动操作:它将自动执行这些操作,但您需要进行检查3)非琐碎的非自动操作:这是一个冲突,例如,在1行上进行了多个更改。非琐碎的部分是您需要手动处理的最小部分,一个好的合并工具将引导您完成这项工作,例如clearcase中的合并工具(它也进行单词合并,并且您可以链接其他特定文件类型的商业或非商业合并)。此外,如果您在(a)项下确定了只应复制的文件,则其行为将不会被合并,而只是以一种方式复制,在不进行合并的情况下覆盖另一个版本(例如,未修改的插件)。这些类型中的许多可能具有不同的行为。但写下CI之间的关系,

然后,对于非基于文本的合并,您需要决定如何处理它们,例如在两个位置更改的图像。你可以在这里决定生产总是有偏好的(至少我是这么认为的),这使它变得简单。

所以要解决这个问题,您需要一个支持不同流的版本管理工具。每个流将代表一个部分。(这可能非常复杂,取决于您的需要,但在这种情况下,我认为它非常简单)。

如果您现在可以在WordPress安装下管理这些流,并将其与数据库内容同步,等等。。。然后,您可以在CM/版本控制工具中执行合并,然后将其导出回其他环境。

事情是。。。你需要先把这个写下来。这不是技术黑客。这是配置管理的默认模式,所以这里也没什么奇怪的,但您需要把它写下来。例如,您可能会发现,安装的插件在数据库中使用其他环境中不同的数据进行更改,因此您需要有一个额外的过程来解决这个问题。

从技术上讲,几乎总是一切皆有可能检查http://www.cmcrossroads.com/forums 对于复杂度高出几十倍或数百倍的场景,尽管始终使用相同的方法和相同的CM模式集。

简而言之:在其下放置一个版本管理层,自动化合并和处理冲突,然后在目标环境中导入。想一个适合这里的流程策略,然后写下来。执行微小的位CM管理。这将是专业的解决方案,否则安装一些数据库复制黑客,脚本等。。。

SO网友:Niklas

我刚刚发表了一篇关于如何将生产数据同步到登台的帖子,请访问我的博客:http://blog.wp.weightpoint.se/2012/01/04/synchronizing-wordpress-multisite-database-from-production-to-staging-enviorment/

如果您也想同步代码和其他内容,我建议您使用相关的忽略文件创建一个git或mercurial存储库。

如果您想从staging对prod进行差异化更新,那么我想创建迁移脚本是最安全和最好的方法。

结束

相关推荐