MySQL数据库多阶段环境
我有这种情况,这需要多个登台环境(无限,具有无限分支)。 其基本思想与GIT有多相似 假设我有一个MySQL数据库多阶段环境,mysql,database,staging,Mysql,Database,Staging,我有这种情况,这需要多个登台环境(无限,具有无限分支)。 其基本思想与GIT有多相似 假设我有一个master数据库(例如生产服务器),我想创建一个数据库的副本,复制到一个新的数据库,在那里我将有一个用于开发和测试的暂存环境 在这个登台环境中,我应该能够测试新代码、错误修复以及开发人员想要做的一切,包括数据库结构和数据更改 我通过转储数据库结构和它们之间的diff来计算如何为数据结构(模式)实现这一点。它可以工作,我可以找到增量,以便稍后在master分支上应用。但是数据呢 假设我有这个数据库:
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
之间合并,这可能会解决各种难以预测的情况
如何做到这一点?我可能错过了几个问题,但以上是我面临的主要问题
谢谢。你能从简单的开始,尽可能少地阅读吗。我们的注意力范围很广,情况相当复杂,我看不出这怎么会更简单。如果你有想法,你可以编辑它。你能从尽可能少的阅读开始更简单吗。我们的注意力范围很广,情况相当复杂,我看不出这怎么会更简单。如果你有想法,你可以编辑它。