MySQL - SQL 作业代理 (SJA) - 基于日期时间的双向数据库同步

MySQL - SQLyog Job Agent (SJA) - Two Way Database Syncronization Based on Date Time

我正在使用 MySQL 并尝试使用 SQLyog Job Agent (SJA)

我正在尝试同步不同物理位置的两个数据库。

每个 table 中都有一个日期时间列,具有最新日期时间的行应覆盖旧行。

SJA 向导允许您输入 WHERE 子句,但我不确定如何表达条件。我想写这样的东西:

WHERE DB1.Table1.dateTimeField > DB2.Table1.dateTimeField THEN update DB2 row with DB1 row as it's newest

但是,它需要双向工作,所以

WHERE DB2.Table1.dateTimeField > DB1.Table1.dateTimeField THEN update DB1 row with DB2 row as it's newest

我确信我可以在 PHP 中编写我自己的数据库同步脚本来根据最新的日期时间戳更新每个 table,但我想我会利用 SJA 工具,因为我会认为它会更好地表现。

我愿意使用替代软件。

谢谢。

编辑

我可以完全访问 table 及其结构。

纯粹基于 sql 的解决方案是

SELECT IF(DB1.Table1.dateTimeField > DB2.Table1.dateTimeField
,@sql := "UPDATE DB1.table1 a INNER JOIN DB2.tbale1 b ON a.col1 = b.col2 SET  a.col2 = b.col2,a.col4 = b.col4 WHERE a.col3 = 1"
,@sql := "UPDATE DB2.table1 a INNER JOIN DB1.tbale1 b ON a.col1 = b.col2 SET  a.col2 = b.col2,a.col4 = b.col4 WHERE a.col3 = 1");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

如果课程有 FROM 子句,SELECT IF 必须获得正确的日期

更新语句如下所示,以便复制正确的行。 您必须对此进行测试,以便通过 SELCT 和 INNER JOIN 进行测试,以便仅更新正确的行并加入右行。

如果您知道哪一列属于哪一列,这也仅适用

UPDATE DB1.tabl1 a INNER JOIN DB2.tbal1 b ON a.col1 = b.col2 
SET
   a.col2 = b.col2,a.col4 = b.col4 WHERE a.col3 = 1

如果您已经测试了所有 sql stetemenst,您可以 运行 在一个事件中这样做,这样它就会每 5 分钟左右朗姆酒。