2

我有一个大约 30,000 行的 MySQL 数据库。我每晚将此数据库更新到远程服务器,但一次更新的行数不会超过 50 行。我是唯一更新数据库的人。我想开发一种方法,其中仅将更改的行导出到远程服务器。

为了节省数据库中的空间并在导出到远程服务器时节省时间,我构建了“存档”表(在远程服务器上),其中包含不再更新且不驻留在本地数据库中的记录。但我知道将这些数据拆分为多个表是不好的设计,如果需要更改表的结构,可能会导致问题。

所以我想重建数据库,以便所有具有相似表结构的记录都在一个表中(就像它们在数据库小得多时一样)。结果表(包含所有存档记录)的大小将超过 80,000 行,对于在整个数据库包中导出来说太大了。

为此,我想(1)在添加或修改行时更新每行中的“最后更新”时间戳(2)当“最后更新”时间戳大于时间戳时,仅选择表中的行进行导出最后一次导出操作的时间 (3) 编写一个查询来构建导出 .sql 文件,其中仅包含新的和更新的行 (4) 更新导出操作的时间戳,以便在下一次导出期间进行比较

有没有人这样做过?如果是这样,我将不胜感激有关如何完成此任务的一些指导。

史蒂夫

4

2 回答 2

2

如果您添加具有timestamp数据类型的列,例如last_updated timestamp,它将自动更新为now()每次行更改时。

然后每天一早,只需发送昨天的更改:

select * from mytable
where last_updated between subdate(CURDATE(), 1) and CURDATE()
于 2013-01-02T03:34:58.563 回答
0

为什么不将远程服务器设置为复制从属服务器?MySQL 只会在这种情况下发送更新的行,并且非常快速/有效。

通常建议使用官方的复制策略,而不是自己动手。如果您遇到问题,您将有很多示例可供参考,并且会有很多人了解正在发生的事情。

于 2013-01-02T02:58:31.800 回答