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 分钟左右朗姆酒。
我正在使用 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 分钟左右朗姆酒。