2009-06-09 125 views
2

我有一个测试服务器,使用来自测试数据库的数据。当我完成测试后,它会移到实时数据库。MySQL表修改时间戳

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

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

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

我不能使用时间戳。首先,我不能控制活着的桌子上的桌子,而且因为看起来有点傻,所以为了方便起见,把桌子放大。

我试着做一个“SHOW TABLE STATUS FROM livedb”,但因为这些表都是InnoDB,所以没有“更新时间”,再加上,看起来“创建时间”是今天上午,让我相信数据库每天都进行备份和重新创建。

表中是否有任何其他属性会显示哪个更新?也许是“最新的行日期”?

回答

2

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

不知道你的数据模型是什么,并没有理解所有同步模型是什么,你有几种选择:

  1. 对阵活数据库与测试数据库的主键。当测试>活动ID时,进行更新。
  2. 在表中使用时间戳以确定是否需要更新
  3. 使用数据库表的md5散列和修改日期(UTC)来确定表是否已更改。

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

0

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

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

+0

问题不仅在于数据是否存在,而且数据是否匹配不幸。这真的让我担心它。尽管它是一个测试网站,但一些测试涉及真实世界的情况(一个是需要拥有正确数据的时间表等)。因此,数据尽可能保持最新是至关重要的,而不要让我的裤子被抓住,并说:“哎呀,让我运行更新程序。”该版本是5.0.76 Enterprise GPL – Anthony 2009-06-09 04:46:33

0

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