2

我有一个使用来自测试数据库的数据的测试服务器。当我完成测试时,它会被移动到实时数据库中。

问题是,我有其他项目现在依赖生产中的数据,所以我必须运行一个脚本,从我需要的表中获取数据,删除测试数据库中的数据并插入实时数据库中的数据。

我一直在想办法改进这个模型。问题并不在于迁移,因为数据每周只更新一次或两次(我没有采取任何行动)。问题是仅在需要时才进行迁移。我想让我的迁移脚本包含对实时表和测试表的快速检查,如果需要,进行移动。如果没有更新,则脚本退出。

这样,我可以将更新脚本包含在我的其他脚本中,而不必担心数据是否同步。

我不能使用时间戳。一方面,一旦上线,我就无法控制直播端的表格,也因为为了方便而增加表格的体积似乎有点愚蠢。

我尝试做一个“SHOW TABLE STATUS FROM liveb”,但因为表都是 InnoDB,没有“更新时间”,另外,“创建时间”似乎是今天早上,让我相信数据库是支持的每天重新创建并重新创建。

表中是否还有其他属性可以显示两者中的哪一个更新?也许是“最新行日期”?

4

3 回答 3

2

简而言之:在您的应用程序中使开发实时更新成为一流的。与其依赖数据库引擎为您提供必要的信息以使您能够做出决定(更新或不更新......这是个问题),不如将其作为应用程序的一部分来实现。否则,您会尝试将圆形钉子安装到方孔中。

在不知道您的数据模型是什么的情况下,并且根本不了解您的同步模型是什么的情况下,您有几个选择:

  1. 将主键与实时数据库与测试数据库进行匹配。当 test > live IDs 时,进行更新。
  2. 使用表中的时间戳来确定是否需要更新
  3. 使用数据库表的 md5 散列和修改日期 (UTC) 来确定表是否已更改。

长话短说:数据库同步非常困难。实施特定于您的应用程序的解决方案。没有理想的“通用”解决方案。

于 2009-06-09T04:40:23.363 回答
0

如果您的表中有自动增量,您可以比较最大自动增量值以查看它们是否不同。

但是你使用的是哪个版本的mysql?

于 2009-06-09T04:31:26.597 回答
0

您可以使用预先存在的解决方案来保持数据库同步,而不是自己滚动。我听说过有关 SQLYog 的 SJA 的好消息(请参阅此处)。我自己从未使用过它,但我对他们的其他程序印象深刻。

于 2009-06-09T04:40:05.500 回答