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

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

我一直在试图找到一种方法来改进这个模型。问题不在于迁移,因为数据每周只更新一两次(我没有采取任何操作)。问题是仅在需要时才进行迁移。我希望我的迁移脚本包括对活动表和测试表的快速检查,并且如果需要的话,进行移动。如果没有更新,脚本就会退出。

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

我无法使用时间戳。首先,一旦上线,我就无法控制现场的桌子,而且为了方便而增加桌子的数量似乎有点愚蠢。

我尝试执行“SHOW TABLE STATUS FROM livedb”,但因为表都是 InnoDB,所以没有“更新时间”,另外,“创建时间”似乎是今天早上,让我相信数据库是支持的每天都会更新和重新创建。

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

有帮助吗?

解决方案

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

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

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

长话短说:数据库同步非常困难。实施特定于您的应用程序的解决方案。不存在可以理想工作的“通用”解决方案。

其他提示

如果你对你的表自动增量,你可以比较的最大自动增量值,看看它们是不同的。

但您使用哪个版本的MySQL?

而不是滚动您自己,您可以使用预先存在的解决方案保持数据库的同步。我听说过SQLyog的的SJA(见这里)。我从来没有用它自己,但我已经很深刻的印象,他们的其他程序。

scroll top