Mysql 用于同步目的的时间戳列的替代项

Mysql 用于同步目的的时间戳列的替代项,mysql,synchronization,timestamp,Mysql,Synchronization,Timestamp,我有一个本地mysql数据库和一个生产mysql数据库。我在本地进行更改,并使用第三方工具将更改同步到live server。该工具使用校验和功能来标识更改的行。我的数据库结构很简单,一个varchar200字段(作为主键)和一个文本字段 问题是同步需要花费很长时间,因为有数千行。我相信添加一个timestamp字段将有助于快速获取校验和,以便工具识别要同步的行。这就产生了更多的问题,因为由于时区的不同,本地服务器和prod服务器中的timestamp字段不同 我正在寻找一个有用的想法或替代时间

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

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

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


附言:我发了一个帖子,但没有得到任何有用的答案。我不想依赖其他表格。

你可以做几件事:

  • 将“dirty”列添加到源表中。当行被更改时,将其设置为一个翻转位,当行被同步时,将其设置为一个翻转位。如果行id是主键,这是一个简单的插入。。。关于重复密钥更新
  • 把你所有的时间都存储为GMT,这样就不用再为时区争吵了。这是存储任何时间的标准做法
  • 设置两台服务器之间的复制,以便MySQL为您执行复制/更新。这正是它的设计目的,它工作得很好

  • 我的建议:不要使用
    时间戳
    数据类型,使用
    日期时间
    。它们包含相同类型的数据,但不同的是,
    时间戳
    会在您每次触摸行时更新,即使您没有设置该列,也会用“现在”更新,包括插入

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


    如果您无法将应用程序编码为使用“now”更新
    DATETIME
    列,只需创建一个触发器即可。给行加时间戳实际上是个坏主意,当客户端更新其最新同步时间时,服务器上可能会更新许多行,您可能会错过这些。使用计数器,每次在服务器上添加或修改行时,计数器都会增加一倍,客户端会更新自身并获取计数器的最新值。客户端可能无法获取计数器的最后一个值(例如,当客户端请求更新时,某些行被更新),但可以保证在下一次更新时能够赶上

    您的旧数据可以更改还是只插入新数据?选项2似乎不错。但是添加datetime列是否有助于该工具快速创建行的校验和?