MySQL表修改了时间戳

时间:2009-06-09 04:23:00

标签: mysql synchronization last-modified datestamp

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

问题是,我有其他项目依赖于现在生产的数据,所以我必须运行一个脚本来抓取我需要的表中的数据,删除测试数据库中的数据并插入数据来自直播DB。

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

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

我不能使用时间戳。首先,一旦它上线,我无法控制现场表格,而且因为为了方便而增加表格似乎有点愚蠢。

我尝试过“从livedb中显示表状态”,但由于这些表都是InnoDB,因此没有“更新时间”,而且,“创建时间”似乎是今天早上,让我相信数据库每天备份并重新创建。

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

3 个答案:

答案 0 :(得分:2)

简而言之:在您的应用程序中进行开发 - 实时更新。而不是依靠数据库引擎为您提供必要的信息,使您能够做出决定(更新或不更新... 这是问题),只需将其作为一部分实现你的申请。否则,你试图将一个圆形钉固定在一个方孔中。

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

  1. 将主键与实时数据库与测试数据库进行匹配。当测试时>实时ID,进行更新。
  2. 使用表格中的时间戳来确定是否需要更新
  3. 使用数据库表的md5哈希值和修改日期(UTC)来确定表是否已更改。
  4. 长话短说:数据库同步非常困难。实施特定于您的应用程序的解决方案。没有理想的“通用”解决方案。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以使用预先存在的解决方案来保持数据库同步,而不是自己滚动。我听说过SQLYog的SJA(见here)。我自己从未使用它,但我对其他程序印象非常深刻。