MySQL数据库多个临时环境

时间:2015-08-28 06:23:31

标签: mysql database staging

我遇到这种情况,需要多个登台环境(无限制,无限制分支)。 基本思路是与 GIT 的相似之处。

假设我有一个master数据库(例如生产服务器),我想创建一个数据库的副本,到一个新的数据库,在那里我将有一个用于我的开发的暂存环境&测试

在这个暂存环境中,我应该能够测试新代码,错误修复以及开发人员想要做的所有事情,包括数据库结构和数据更改。

我想通过转储数据库结构以及它们之间的diff来计算如何为数据结构(模式)执行此操作。它有效,我可以找到稍后在master分支上应用的delta。但是数据呢?

假设我有这个数据库:

Table1
ID    name    timestamp
1     row1    2015-08-25 00:00:00
2     row2    2015-08-26 00:00:00
3     row3    2015-08-27 00:00:00
4     row4    2015-08-28 00:00:00

Table1_Table2
table1_id    table2_id
1            1
1            2
2            2
3            3
4            4

Table2
ID    name    timestamp
1     row1    2015-08-25 12:00:00
2     row2    2015-08-27 12:00:00
3     row3    2015-08-26 12:00:00
4     row4    2015-08-28 12:00:00

将数据库克隆到新环境后,假设我做了一些更改,克隆看起来像这样:

克隆1

Table1
ID    name    timestamp
3     row3    2015-08-27 00:00:00
4     row4    2015-08-28 00:00:00
5     row5    2015-08-28 01:00:00

Table1_Table2
table1_id    table2_id
3            3
4            2
5            1

Table2
ID    name    timestamp
1     row1    2015-08-25 12:00:00
2     row2    2015-08-27 12:00:00
3     row3    2015-08-26 12:00:00

数据库之间的差异

Table1
 ID    name    timestamp
-1     row1    2015-08-25 00:00:00
-2     row2    2015-08-26 00:00:00
+5     row5    2015-08-28 01:00:00

Table1_Table2
 table1_id    table2_id
-1            1
-1            2
-2            2
-4            4 (This and the one below it, it's actually an update)
+4            2
+5            1

Table2
 ID    name    timestamp
-4     row4    2015-08-28 12:00:00

这很好,但是在GIT中,master分支可以保持前进,并且可能会出现新数据,并且可能会有更改。

所以这是master复制之后的一段时间我希望合并clone1master

Table1
ID    name    timestamp
1     row1    2015-08-25 00:00:00
2     row2    2015-08-26 00:00:00
3     row3    2015-08-27 00:00:00
4     row4    2015-08-28 00:00:00
5     row5new 2015-08-28 00:00:00

Table1_Table2
table1_id    table2_id
1            1
1            2
2            2
3            3
4            4
5            2

Table2
ID    name    timestamp
1     row1    2015-08-25 12:00:00
2     row2    2015-08-27 12:00:00
3     row3    2015-08-26 12:00:00
4     row4    2015-08-28 12:00:00

复制之前的master 之后的之间的差异:

Table1
 ID    name    timestamp
+5     row5new 2015-08-28 00:00:00

Table1_Table2
 table1_id    table2_id
+5            2

现在这很简单,我几乎没有做任何改变,但是你可以看到我已经发生了冲突。 Table1clone1上存在master第5行,但在复制发生时不存在。这意味着用户应该决定他想要保留哪一个。

与GIT不同,他可能都想要它们。所以我应该改变指数?这可能是一个坏主意。因为我们说有另一个表,其中提到了复制后的主行索引,所以我应该搜索它,并更新到新索引?这可能有效,但只有我们之间有关系/我们知道业务逻辑,这两种情况都可能根本不存在。

另一个问题是我们可能想要在clone2之后创建另一个克隆clone1,并且在结构和数据方面可能有不同的起点。

如果我想在clone2master之间进行合并,然后在clone1master之间进行合并,这可能会在很难预测的各种情况下解决

如何实现这一目标?我可能错过了几个问题,但以上是我面临的主要问题。

感谢。

0 个答案:

没有答案