Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL数据库多阶段环境_Mysql_Database_Staging - Fatal编程技术网

MySQL数据库多阶段环境

MySQL数据库多阶段环境,mysql,database,staging,Mysql,Database,Staging,我有这种情况,这需要多个登台环境(无限,具有无限分支)。 其基本思想与GIT有多相似 假设我有一个master数据库(例如生产服务器),我想创建一个数据库的副本,复制到一个新的数据库,在那里我将有一个用于开发和测试的暂存环境 在这个登台环境中,我应该能够测试新代码、错误修复以及开发人员想要做的一切,包括数据库结构和数据更改 我通过转储数据库结构和它们之间的diff来计算如何为数据结构(模式)实现这一点。它可以工作,我可以找到增量,以便稍后在master分支上应用。但是数据呢 假设我有这个数据库:

我有这种情况,这需要多个登台环境(无限,具有无限分支)。 其基本思想与GIT有多相似

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

在这个登台环境中,我应该能够测试新代码、错误修复以及开发人员想要做的一切,包括数据库结构和数据更改

我通过转储数据库结构和它们之间的
diff
来计算如何为数据结构(模式)实现这一点。它可以工作,我可以找到增量,以便稍后在
master
分支上应用。但是数据呢

假设我有这个数据库:

掌握

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
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
将DB克隆到新环境后,假设我做了一些更改,克隆结果如下所示:

克隆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
,现在我想在
clone1
master
之间合并

掌握

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
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
复制前和复制后
之间的差异:

现在这是一个简单的问题,我几乎没有做任何改变,但正如你所看到的,我已经有了冲突<代码>表1
行编号5存在于
克隆1
主机上,但在复制发生时不存在。这意味着用户应该决定要保留哪一个

与GIT不同的是,他可能想要两者。所以我应该移动索引?这可能是个坏主意。因为假设有另一个表,其中提到了复制后来自master的行的索引,所以我应该搜索它,并更新到新索引?这可能会起作用,但前提是我们与他们之间有关系/我们知道业务逻辑,而在这两种情况下可能根本没有关系

另一个问题是,我们可能需要另一个克隆
clone2
,它是在
clone1
之后创建的,在结构和数据上可能有不同的起点

如果我想在
clone2
master
之间合并,然后在
clone1
master
之间合并,这可能会解决各种难以预测的情况

如何做到这一点?我可能错过了几个问题,但以上是我面临的主要问题


谢谢。

你能从简单的开始,尽可能少地阅读吗。我们的注意力范围很广,情况相当复杂,我看不出这怎么会更简单。如果你有想法,你可以编辑它。你能从尽可能少的阅读开始更简单吗。我们的注意力范围很广,情况相当复杂,我看不出这怎么会更简单。如果你有想法,你可以编辑它。