替代timestamp列以进行同步

时间:2012-01-06 12:33:50

标签: mysql synchronization timestamp

我有一个本地mysql数据库和一个生产mysql数据库。我在本地进行更改并使用第三方工具将更改同步到实时服务器。该工具使用校验和功能来标识已更改的行。我的db结构很简单,一个varchar200字段(作为主键)和一个文本字段。

问题是同步需要很长时间,因为有数千行。我相信添加一个时间戳字段将快速获取校验和,以便工具识别要同步的行。由于时区差异,本地和prod服务器的时间戳字段不同,这会产生更多问题。

我正在寻找一个有用的想法或替代时间戳,当行被修改时会被更改。

PS:我发布了一个similar question,但没有得到任何有用的答案。我不想依赖额外的桌子。

3 个答案:

答案 0 :(得分:2)

你可以做几件事:

  1. 将“脏”列添加到源表。使它成为一个单独的BIT,当行被更改时你可以翻转它,并在它同步时将其翻转。如果行id是主键,则这是一个简单的插入...在重复键更新
  2. 将您的所有时间存储为GMT。所以没有更多的时间战斗。无论如何,这是标准做法。
  3. 在两台服务器之间设置复制,以便MySQL为您进行复制/更新。这正是它的设计和运作良好。

答案 1 :(得分:2)

我的提示:请勿使用TIMESTAMP数据类型,请使用DATETIME。它们拥有相同类型的数据,但每次触摸行时,{em>>的差异都会更新,即使您没有设置该列,也会使用“now”进行更新,包括插入。

这意味着当您使用TIMESTAMP时,您永远无法真正同步这两个数据库 - 该列将始终不同。如果您使用TIMESTAMP,则可以保留该列的数据。

如果您无法对应用程序进行编码以使用“now”更新DATETIME列,只需创建一个可以为您执行此操作的触发器。

答案 2 :(得分:0)

对行添加时间戳实际上是一个坏主意,当客户端更新自己的最新同步时间时,许多行可能会在服务器上更新,您可能会错过这些行。使用每次在服务器上添加或修改行时增加1的计数器,客户端自行更新并获取计数器的最新值。客户端可能无法获得计数器的最后一个值(例如,当客户端请求更新时某些行会更新)但是保证在下次更新时赶上